让我们从以下示例代码开始:
int a = 0, b = a++, c = a;
在a++
之前a
排序c = a
? a++
和a
似乎有资格作为完整表达,根据cppreference(规则1),答案应该是正面的。但我不确定。
答案 0 :(得分:2)
是。正如Brian所指出的,这不是逗号运算符,而是 init-declarator-list 。从[dcl.decl]我们得到:
声明中的每个 init-declarator 都会被单独分析,就好像它本身就在声明中一样。
用脚注说明:
具有多个声明符的声明通常等效于相应的声明序列,每个声明都有一个声明 声明符。那是
T D1, D2, ... Dn;
通常相当于
T D1; T D2; ... T Dn;
其中
T
是 decl-specifier-seq ,每个Di
是 init-declarator 。
有两个例外,一个用于隐藏类型的名称,另一个用于auto
,两者都不适用。所以最终,你拥有的代码完全等同于:
int a = 0;
int b = a++;
int c = a;
您首先应该首先编写,因为它不会搜索标准以确保您正在做有效的事情!