人们说这话是什么意思?对程序员和编译器有什么影响?

最佳答案

这与C++的模板系统为Turing complete有关。从理论上讲,这意味着您可以在编译时使用模板使用任何其他图灵完整语言或系统来计算任何内容。

这样做的副作用是,某些看似有效的C++程序无法编译。编译器将永远无法决定程序是否有效。如果编译器可以决定所有程序的有效性,则可以解决Halting problem

注意,这与C++语法的歧义无关。

编辑:乔什·哈伯曼(Josh Haberman)在下面的注释中以及在blog post中指出了一个极好的示例,即为C++构建解析树实际上是不可取的。由于语法的含糊性,不可能将语法分析与语义分析分开,并且由于语义分析是无法确定的,因此语法分析也是如此。

另请参阅(Josh帖子的链接):

  • C++ grammar: the type name vs object name issue
  • C++ grammar: type vs object and template specializations
  • 关于c++ - 人们说C++具有 “undecidable grammar”是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/794015/

    10-09 15:00