C++:变量声明初始化顺序

sho*_*osh 15 c++

当我定义一些像这样的变量时:

int a = pop(), b = pop(), c = pop();
Run Code Online (Sandbox Code Playgroud)

C++是否提供了a首先被初始化的保证,b然后c呢?或者订单没有定义?

Jon*_*ely 12

[dcl.decl]/3说

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

这意味着您的代码被视为:

int a = pop();
int b = pop();
int c = pop();
Run Code Online (Sandbox Code Playgroud)

  • @JonathanWakely:是的,我刚才注意到了.[dcl.init]就是这个地方,事实上在#97(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf)中,这是相当的明确指出`T a,b,c`是一个"序列",相当于`T a; T b; T c;`."通常"这个词在理解序列时不是指例外,而是指标识符的潜在碰撞:`T a,T,b,c;`肯定不等于`T a; TT; T b; T c;`.因此,我同意它的定义,但是该死的,我希望它能够被明确地写成一个恰当的点,而不是一个脚注. (5认同)
  • 仍然不保证任何特定的订单. (3认同)
  • 嗯 - 我不相信这意味着可预测的初始化顺序...... (2认同)