`int a = 0,b = a`是否有未定义的行为?

时间:2013-03-12 20:34:13

标签: c++ declaration undefined-behavior

问题标题说明了一切:int a = 0, b = a形式的声明是否有未定义的行为?

2 个答案:

答案 0 :(得分:12)

不,这是明确定义的。这是一个包含两个声明符ab的声明。每个声明者都有一个初始化器。

  

声明中的每个 init-declarator 都会被单独分析,就好像它本身就在声明中一样。

也就是说,该行被视为:

int a = 0;
int b = a;

答案 1 :(得分:8)

不,没有未定义的行为

C ++ 11标准的第8/3段:

  

声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样

此外,如脚注97所述:

  

具有多个声明符的声明通常等效于相应的声明序列,每个声明都有一个   声明符。那是

     

T D1, D2, ... Dn;

     

通常(*)相当于

     

T D1; T D2; ... T Dn;

这意味着首先初始化a,然后初始化b并假设a的值。另请注意,即使不是这种情况,也有quite a long debate on SO关于这是否会成为UB,并且已达成一些共识,而不是UB。


(*):正如Olaf Dietsche在评论中所解释的那样,等效性的情况将在后面的同一脚注中提及。