Jó kérdés.
Csináltam egy kis tesztprogramot (cout_initial.cpp):
amihez kreáltam egy kis Bash shellszkriptet:
és elindítottam.
65536 karakternél még szépen lefordult (i5 4570 procival, 16 GiB RAM-mal, xUbuntu 16.04-es rendszeren a C++-fordító 9:12 (perc:másodperc) ideig közel 100%-on terhelte a processzort, elfogyasztott 3674168 kiB RAM-ot), 131072 már nem tetszett neki:
g++: internal compiler error: Szegmentálási hiba (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
Command exited with non-zero status 4
Hozzátenném: az általam tesztelt C++ fordító:
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Igen. Az, hogy std::cout<<"Valami" azt úgy képzeld el, mintha a << operatort hívnád meg az std::cout-al, és a "Valami" stringgel paraméterként. Az általános deklarációja így néz ki:
std::ostream& operator<<(std::ostream& os, const T& obj)
Az, hogy egymás után több ilyet is teszel úgy néz ki, hogy az operator visszetér a stream-el, amire írtál, és az lesz a következő hívás baloldali operandusa.
std::cout<<foo<<bar úgy képzelendő el, hogy:
( std::cout<<foo )<<bar
az std::cout<<foo ráírja a foo értékét a cout streamre, és visszatér a streammel, így a következő hívás bal operandusa ismét az std::cout lesz, amire már rá van írva a foo értéke.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!