Почему std::string s ( "?? <" ) выводит a {вместо <<как ожидалось?
std::string s("??<");
std::cout << s << std::endl;
Почему этот вывод {вместо <<
Я использую Visual Studio 2008. Я предполагаю, что он кодирует его, но почему и что называется кодировкой, если это происходит?
Этот маленький% # $^ *! заставил меня искать ошибку в моем (unit test) коде в течение 30 минут, прежде чем я понял, что моя строка искалечена!!: (
Ответы
Ответ 1
Из-за trigraphs.
Это поддерживаемые триграфы со страницы Википедии:
-
??=
→ #
-
??/
→ \
-
??'
→ ^
-
??(
→ [
-
??)
→ ]
-
??!
→ |
-
??<
→ {
-
??>
→ }
-
??-
→ ~
Для Visual Studio в соответствии с триггеры документации отключены по умолчанию (достаточно разумно), поэтому проверьте свой проект /make файлы.