为什么std :: string s(“??<”)输出一个{而不是??<正如所料?

时间:2009-12-16 16:54:12

标签: c++ encoding string

std::string s("??<");
std::cout << s << std::endl;

为什么输出{而不是??&lt;

我正在使用Visual Studio 2008.我认为它正在对它进行编码但是为什么以及如果发生这种情况会调用什么编码?

这个小%#$ ^ *!导致我在我的(单元测试)代码中查找错误30分钟,然后我发现我的字符串被破坏了! :(

1 个答案:

答案 0 :(得分:26)

由于trigraphs

这些是受支持的三元组,来自维基百科页面:

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

对于Visual Studio,根据the documentation默认情况下关闭三字符(足够明智),所以检查你的项目/ makefile。