歧义语句解析(仅限 C++)

C++ 语法不会在表达式语句和声明语句之间消除岐义。 当表达式语句将函数样式强制转换为其最左边的子表达式时,会产生模糊性。 (请注意,由于 C 不支持函数式强制类型转换,因此在 C 程序中不会出现此模糊性。) 如果该语句既可以解释为声明,也可以解释为表达式,那么该语句将被解释为声明语句。

注: 仅在语法级别上解析模糊性。 消岐不使用名称的含义,只是评估它们是否是类型名称。
以下表达式在表达式语句中消岐,因为岐义子表达式后跟赋值或运算符。 表达式中的 type_spec 可以是任何类型说明符:
type_spec(i)++;             // expression statement
type_spec(i,3)<<d;          // expression statement
type_spec(i)->l=24;         // expression statement
在以下示例中,无法从语法上解析模糊性,并且会将这些语句解释为声明。 type_spec 是任何类型说明符:
type_spec(*i)(int);         // declaration
type_spec(j)[5];            // declaration
type_spec(m) = { 1, 2 };    // declaration
type_spec(*k) (float(3));   // declaration

以上最后一个语句会导致编译时错误,因为您无法使用浮点值初始化指针。

上述规则未解析的任何模糊语句在缺省情况下都是声明语句。 以下所有内容都是声明语句:
type_spec(a);               // declaration
type_spec(*b)();            // declaration
type_spec(c)=23;            // declaration
type_spec(d),e,f,g=0;       // declaration
type_spec(h)(e,3);          // declaration