Ja ich wollte es nicht erläeutern, weil wir den netten Betagurke dann nurnoch mehr verwirren
Aber durch eure Kritik hab ich nochmal nachgeforscht, denn es ist DOCH anders als ich dachte.
Ich hatte angenommen:
endl ist irgendeine Konstante oder Makro, welches per die überladenen << operatoren in die cout klasse geschoben wird. Die Klasse verwendet dann diese Konstante, um etwas damit zu machen.
ABER, das scheint wohl nicht ganz richtig zu sein, denn es gibt zumindest eine Funktion, die tatsächlich endl() heißt:
Code:
_CRTIMP2_PURE inline basic_ostream<char, char_traits<char> >&
__CLRCALL_OR_CDECL endl(basic_ostream<char, char_traits<char> >& _Ostr)
{ // insert newline and flush byte stream
_Ostr.put('\n');
_Ostr.flush();
return (_Ostr);
}
Es ist tatsächlich so, dass das "endl" was wir nach einem cout schreiben ein Funktionspointer ist. Es gibt eine Variante des überladenen Operators <<, der Funktionspointer (in unserem Fall: "ios_base& ( *pf )(ios_base&)" ) akzeptiert. Und mit endl übergeben wir der überladenen Operator funktion den Funktionszeiger auf endl, welcher die Funktion endl dann auch aufruft.
Pff, schön kompliziert

Danke übrigens, dass ihr nochmal gemeckert habt, hat mich schlauer gemacht (ist ernst gemeint

)
Falls noch jemand diskutieren möchte: Kommt mal in den ProgrammiererChannel (siehe meine Signatur)
mfg
Lukas