【发布时间】:2020-06-16 13:30:27
【问题描述】:
C++ 标准将well-formed programs 定义为
根据语法规则构造的C++程序,可诊断 语义规则和单定义规则
我想知道是否所有格式良好的程序都可以编译(如果不是这种情况,什么类型的错误会影响格式正确的程序和可编译问题之间的差异)。例如,包含歧义错误的程序是否会被视为格式正确?
【问题讨论】:
-
歧义违反了可诊断的语义规则,所以不,这不是很好的格式。
-
所有格式正确的程序都会编译(假设编译器正确)。但不是相反。例如,违反“单一定义规则”(ODR)的行为经常(甚至大部分)不会被编译系统发现。
-
@davidbak 程序可能会溢出编译器限制...
-
@curiousguy - C++ 标准没有说明允许编译器在哪里有限制,甚至可能是这些限制的下限? (我不知道,这就是我问的原因。)
-
@davidbak 确切地说,编译器可以有限制(文件中的行、函数中的语句、模板实例的嵌套......)。对于这些限制,标准中有推荐的最小值(据我所知)。这是实现不执行其工作的合法通配符。但是,如果有一个“符合”但限制很小的实现是不诚实的。
标签: c++ language-lawyer standards well-formed