почему std :: string s ("?? <") выдает a {вместо ?? <, как и ожидалось? - PullRequest
11 голосов
/ 16 декабря 2009
std::string s("??<");
std::cout << s << std::endl;

Почему это выводит {вместо ?? <</p>

Я использую Visual Studio 2008. Я предполагаю, что это кодирует его, но почему и как называется кодировка, если так происходит?

Этот маленький% # $ ^ *! заставил меня искать ошибку в моем (модульном тесте) коде в течение 30 минут, прежде чем я понял, что моя строка искажена !! (

1 Ответ

26 голосов
/ 16 декабря 2009

Из-за триграфов .

Это поддерживаемые триграфы со страницы Википедии:

  • ??= & rarr; #
  • ??/ & rarr; \
  • ??' & rarr; ^
  • ??( & rarr; [
  • ??) & rarr; ]
  • ??! & rarr; |
  • ??< & rarr; {
  • ??> & rarr; }
  • ??- & rarr; ~

Для Visual Studio, согласно документация триграфы отключены по умолчанию (достаточно разумно), поэтому проверьте ваш проект / makefiles.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...