2016-04-08 11 views
14

Der Quellcode ist wie folgt.Warum versagt die Anweisung "cout << '\\';" nicht?

cout << '\\' << endl; //OK, output is \ 
cout << '\\\\' << endl; //OK, output is an integer 23644, but why? 

Die Anweisung cout << '\\\\' << endl; ruft die folgende Funktion der Klasse ostream.

_Myt& __CLR_OR_THIS_CALL operator<<(int _Val) 

Ich weiß, dass es seltsam ist, den Ausdruck '\\\\', zu schreiben, aber ich verstehe nicht, warum es nicht ausfällt. Wie erklärt man das Ergebnis?

+1

Was meinen Sie mit "fail"? Denkst du, es sollte nicht kompiliert werden? Wenn ja, mit welchem ​​Fehler? Es ist nicht klar, warum Sie dieses Verhalten als unerwartet empfinden. –

+2

Weitere Informationen finden Sie unter http://stackoverflow.com/q/3960954/2491746. – Simple

+0

Ich frage diese Frage gerne in den Interviews. –

Antwort

15

Dies ist ein Mehrzeichen-Literal und hat den Typ int.

[lex.ccon]/2:

Ein gewöhnlicher Zeichenliteral die mehr als eine C-char a Multizeichen Literal enthält. Ein Mehrzeichen-Literal oder ein gewöhnliches Zeichenliteral, das ein einzelnes c-Zeichen enthält, das im Ausführungszeichen nicht dargestellt werden kann, ist bedingt unterstützt, hat den Typ int und einen implementierungsdefinierten Wert.

Sie sollten "\\\\" verwenden, die char const[3] ist: zwei \ und ein NUL-Byte am Ende.