Pau*_*nta 13 c++ declaration undefined-behavior
问题标题说明了一切:表单的声明int a = 0, b = a是否有未定义的行为?
Jos*_*eld 12
不,这是明确定义的.这是一个包含两个声明符的声明,a和b.每个声明者都有一个初始化器.
声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样.
也就是说,该行被视为:
int a = 0;
int b = a;
Run Code Online (Sandbox Code Playgroud)
不,没有未定义的行为.
根据C++ 11标准的第8/3段:
声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样
另外,如脚注97所述:
具有多个声明符的声明通常等效于具有单个声明符的相应声明序列.那是
T D1, D2, ... Dn;通常(*)相当于
T D1; T D2; ... T Dn;
这意味着a首先初始化,然后b初始化并假定值a.同时请注意,即使情况并非如此,关于这是否会成为UB的问题仍然存在很长时间的争论,并且已经达成了一些关于这不是UB的共识.
(*):由于在评论中所解释的奥拉夫Dietsche,在此不等价的情况下,不抱以同样的脚注中提到以后.
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |