Почему утверждение "cout << '\\\\'; не обязательно?

Исходный код выглядит следующим образом.

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

Оператор cout << '\\\\' << endl; вызывает следующую функцию класса ostream.

_Myt& __CLR_OR_THIS_CALL operator<<(int _Val)

Я знаю, что странно писать выражение '\\\\', но я не понимаю, почему это не сработает. Как объяснить результат?

Ответы

Ответ 1

Это многоканальный литерал и имеет тип int.

[lex.ccon]/2:

Литерал обычного характера, содержащий более одного c- char, является многоканальным литералом. Многозначный литерал или обычный символьный литерал, содержащий единственный c- char, не представимый в исполнительном символе set, является условно-поддерживаемым, имеет тип int и имеет значение, определенное реализацией.

Вы должны использовать "\\\\", который char const[3]: два\и байт NUL в конце.