以下是完美定义的:
int x = 42, y = x;
即严格等同于:
int x = 42;
int y = x;
编辑:问题不是关于风格(我知道这是错误的......),问题是“理论”
正确答案是
int x = 42, y = x;
and
int x = 42;
int y = x;
通常是等价的(不严格)。
考虑到标准§ 8 声明符 [dcl.decl]:
3
声明中的每个初始化声明符都会被单独分析,就像它本身在声明中一样。
并在脚注[100]中进一步解释:
具有多个声明符的声明通常等价于相应的声明序列,每个声明序列都有一个声明符
声明者。那是
T D1、D2、...Dn;
通常相当于
D1; D2; ... T Dn;
其中 T 是一个 decl-specifier-seq,每个 Di 是一个 init-declarator。
以上保证了x = 42
and y = x
将单独评估。然而,作为@禁卫军评论中正确指出,脚注不规范。
这意味着评估的顺序没有明确定义,实现者也可以以相反的顺序实施声明的评估(即,T Dn; ...T D2; T D1;
).
有人可能会争辩说,逗号运算符可以保证从左到右的计算。然而,事实并非如此。根据 K & R [K & R II, 3.6 p.63],这也适用于 C++:
分隔函数参数、声明中的变量等的逗号不是逗号运算符,并且不保证从左到右计算。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)