问题标题说明了一切:表单的声明是否int a = 0, b = a
具有未定义的行为?
问问题
654 次
2 回答
12
不,这是明确定义的。这是一个带有两个声明符的声明,a
并且b
. 每个声明器都有一个初始化器。
声明中的每个init-declarator都被单独分析,就好像它本身在声明中一样。
也就是说,该行被视为:
int a = 0;
int b = a;
于 2013-03-12T20:37:30.270 回答
8
不,没有未定义的行为。
根据 C++11 标准的第 8/3 段:
声明中的每个 init-declarator 都被单独分析,就好像它本身在声明中一样
此外,如脚注 97 所述:
具有多个声明符的声明通常等效于相应的声明序列,每个声明都具有单个声明符。那是
T D1, D2, ... Dn;
通常(*)相当于
T D1; T D2; ... T Dn;
这意味着a
首先被初始化,然后b
被初始化并采用 的值a
。另请注意,即使情况并非如此,关于 SO是否会是 UB也存在相当长的争论,并且已经就这不是 UB 达成了一些共识。
(*):正如 Olaf Dietsche 在评论中所解释的,稍后在同一个脚注中提到了这种等价不成立的情况。
于 2013-03-12T20:42:01.883 回答