stream átirányítás operátor leírás (std::cout << "Hello World!" << std::endl;)

Fórumok

Tiszteletem!

std::cout << "Hello World!" << std::endl;

Az fenti sor esetében a szöveg kiírása emlékeim szerint "csupán" mellékhatás.
Akkor a "fő tevékenysége" mi is a sornak?

Hozzászólások

This operator (<<) applied to an output stream is known as insertion operator. It performs an output operation on a stream generally involving some sort of formatting of the data (like for example writing a numerical value as a sequence of characters).

KisKresz

Közben én is nézegettem, hátha valahol találok leírást a kérdésről. Sajnos magyarul nem találtam semmit, pedig átnéztem 5-6 könyvet. Viszont ez (ISBN 0-201-70353-X; Chapter 0, 4.) beszél erről. Ezexerint
A fenti sor eredménye ostream típusú std::cout lesz, és az std::endl manipulátorként szerepel a műveletben. A pontosvessző hatására válik érdektelenné az eredmény és csak a mellékhatás számít.
--
unix -- több, mint kód. filozófia.
Life is feudal

Ezt azért nem nevezném mellékhatásnak.
Ezzel az erővel a printf is csak egy void-ot állít elő. :)

A lényeg, hogy van nekünk egy ilyenünk (többek között):


std::ostream& operator<< (std::ostream& out, char* str);

Ez ha úgy tetszik egy közönséges fv.
A te sorod elejét írhatnád így is:


operator<< (std::cout, "Hello world");

Arról van szó, hogy elvégzel egy műveletet, majd az eredményül kapott objektumot visszaadod további felhasználásra. Én egyiket sem nevezném mellékhatásnak.

A te gondolatmeneted alapján a ++i utasítás mellékhatása, hogy növeli i értékét...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

A mellékhatás szó nem azt jelenti, hogy a hatás mellékes (a program szempontjából), hanem csak azt, hogy a történést egy operátorral váltod ki.
Minden mellékhatás, ami a rendszer állapotában bekövetkező változás egy operátor hatására. Sima C-ben van pár mellékhatásos operátor ( =, ++, --), C++-ban viszont bármelyiket mellékhatásossá teheted ahogy tetszik.

Így hívják, még akkor is ha szerencsétlen elnevezés. Matematikusok számára lehet intuitív a mellékhatás elvenezés, mert ők az operátorokra másként gondolnak, mint az informatikus.

nem volt személy szerint problémám a mellékhatás kifejezéssel, csak érdekelt volna, hogy ha a szöveg kiíratása a mellékhatás, akkor mi a végeredmény. Azaz a művelet végeredménye micsoda. A könyv szerint az ostream típusú std::cout az eredmény.
--
unix -- több, mint kód. filozófia.
Life is feudal