c++ - C++1z为什么不删除带有字母栏的图?

  显示原文与译文双语对照的内容
0 0

C++1z将删除 trigraphs 。IBM,严重反对这个( 这里 ),因此可能存在删除/非删除的两边的参数。

但是,既然决定要删除字母栏,那么为什么要留下有向图? 我不认为有任何理由保持有向图的理由是保留字母栏( 显然没有足够的重量) 。

时间: 原作者:

0 0

对于未知的用户,字母栏比有向图更有问题。 这是因为它们在字符串文本和注释中被替换。 下面是一些例子。

示例A:

std::string example ="What??!??!";
std::cout <<example <<std::endl;

What|| 将被打印到控制台。 这是因为 trigraph ?? 被转换为 | 。!

示例B:

//Error?!?!?!??!??/
std::cout <<"There was an error!" <<std::end;

根本不会发生什么。 这是因为 ??/ 转换为 ,它转义换行符并导致下一行被注释掉。

示例C:

//This makes no sense?!?!!?!??!??/
std::string example ="Hello World";
std::cout <<example <<std::endl;

这将给出一个错误沿着 use of undeclared identifier"example" 由于与示例B 相同的原因。

trigraphs可能会产生更复杂的问题,但是你会发现。 值得注意的是,许多编译器在进行此类翻译时实际上发出警告;另一个原因是将警告视为错误。 然而,这不是标准所要求的,因此不能被依赖。

有有图的有问题的问题比 trigraphs,因为它们不被替换在另一个标记( 例如 ) 中。 字符串或者字符文本) 并没有转换为 的序列,因此注释中的new 行不能发生。

结论

除了更难阅读代码之外,有一个有插图的问题也没有问题,因此需要删除它们,大大减少了。


我写了一篇关于这个问题的文章,与这个问题非常。 对于那些感兴趣的人来说,这里的是一个链接。 我在这里链接的原因是,因为 1 ) 它是相关的,2 ) 这个答案几乎是文章的一个直接的copy-paste 。

原作者:
...