Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:变量声明初始化顺序_C++ - Fatal编程技术网

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

C++ C++;:变量声明初始化顺序,c++,C++,当我定义一些变量时,如下所示: int a = pop(), b = pop(), c = pop(); < > C++给出了一个保证: A将首先被初始化,然后 B,然后 C?或者订单没有定义?[dcl.decl]/3说 -3-声明中的每个init声明器都被单独分析,就像它自己在声明中一样 这意味着您的代码被视为: int a = pop(); int b = pop(); int c = pop(); 你能解释一下为什么这很重要吗?我们可能会给出一个更好的答案:我只想写一行而不是三行:)提

当我定义一些变量时,如下所示:

int a = pop(), b = pop(), c = pop();
< > C++给出了一个保证:<代码> A<代码>将首先被初始化,然后<代码> B<代码>,然后<代码> C<代码>?或者订单没有定义?

[dcl.decl]/3说

-3-声明中的每个init声明器都被单独分析,就像它自己在声明中一样

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

int a = pop();
int b = pop();
int c = pop();

你能解释一下为什么这很重要吗?我们可能会给出一个更好的答案:我只想写一行而不是三行:)提高可读性,并通过使用三行来维护您的订单。就这么简单。不管怎么说,摆脱两条糟糕的台词有什么意义?我同意@stefan的观点。我很少(从不?)在一行中使用多个声明。如果这种情况发生在for init语句中,如for(int a=pop(),b=pop(),c=pop();…),那么这个问题就更有趣了。您可以将其中两个声明放在前一行,但现在它们的作用域不同了嗯-我不相信这意味着一个可预测的初始化顺序…这仍然不能保证任何特定的顺序。注释97提供了一个解释,但使用了“通常”的工作。然而,我相信,这只意味着这条规则有明确定义的例外情况,但它不是“由编译器决定的”。@JonathanWakely:因此,如果必须依赖脚注来对所需行为进行规范性陈述,那么可以说这是标准中的一个(小)缺陷。但我认为你对标准的定义是正确的:-)在这种情况下,我通常会说,虽然脚注不规范,但它们通常是正确的。@JonathanWakely:是的,我刚刚注意到了这一点。[dcl.init]正是这个地方,事实上在注释#97()中明确指出,
ta,b,c
是一个“序列”,相当于
ta;tb;tc。“通常”一词不是指理解序列时的异常,而是指标识符的潜在冲突:
ta,T,b,c
肯定不等于
ta;T;tb;tc。因此,我同意它是有定义的,但该死的,我希望它是作为一个适当的点,而不是一个脚注写清楚。。