Was ist der Unterschied zwischen Coutcout und Cout & Cout in C ++?

8

Dies könnte eine Anfängerfrage sein und zu verstehen, wie Cout funktioniert, ist hier wohl der Schlüssel. Wenn sich jemand mit einer guten Erklärung verbinden könnte, wäre das großartig. cout<<cout und cout<<&cout drucken Hex-Werte, getrennt durch 4 auf einer Linux x86-Maschine.

    
byslexia 20.09.2011, 17:17
quelle

5 Antworten

16

cout << cout entspricht cout << cout.operator void *() . Dies ist das Idiom, das vor C ++ 11 verwendet wurde, um festzustellen, ob ein Iostream in einem Fehlerzustand ist, und wird in std::ios_base ; es gibt normalerweise die Adresse von static_cast<std::ios_base *>(&cout) zurück.

cout << &cout gibt die Adresse von cout aus.

Da std::ios_base eine virtuelle Basisklasse von cout ist, muss sie nicht unbedingt mit cout zusammenhängen. Deshalb gibt es eine andere Adresse aus.

    
MSN 20.09.2011, 17:24
quelle
5

cout << cout verwendet die integrierte Umwandlung in void* , die für boolesche Testzwecke existiert. Aus irgendeinem uninteressanten Grund verwendet Ihre Implementierung eine Adresse, die 4 Bytes in das Objekt std::cout ist. In C ++ 11 wurde diese Konvertierung entfernt und sollte nicht kompiliert werden.

cout << &cout gibt die Adresse des std::cout -Objekts aus.

    
R. Martinho Fernandes 20.09.2011 17:24
quelle
4

cout << &cout übergibt cout die Adresse von cout .

cout << cout druckt den Wert von cout implizit auf einen void* -Zeiger mit seiner operator void* .

    
GWW 20.09.2011 17:23
quelle
3

Wie bereits erwähnt, verwendet cout << cout die für Bool-Tests vorgesehene void* -Konvertierung ( while (some_stream){ ... } , etc.)

Es wird der Wert & amp; cout + 4 ausgegeben, da die Konvertierung in der Basisimplementierung erfolgt und in einen eigenen Typ umgewandelt wird. Dies ist von libstdc ++ :

%Vor%     
James 20.09.2011 17:33
quelle
0

cout<<&cout gibt die Adresse von cout an den Stream weiter.

    
Daniel A. White 20.09.2011 17:19
quelle

Tags und Links