2013-03-06 159 views
14

当我定义这样的一些变量:C++:变量声明初始化顺序

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

不C++提供一个保证a将被首先初始化,然后b然后c?或者订单没有定义?

+1

你能解释一下为什么这很重要?我们可能会给出更好的答案 – alestanis 2013-03-06 13:29:11

+0

我想只写一行而不是3行:) – shoosh 2013-03-06 13:34:59

+4

提高可读性并使用3行声明您的订单。就这么简单。无论如何,摆脱两条糟糕的线条有什么意义? – stefan 2013-03-06 13:35:49

回答

11

[dcl.decl]/3说

-3-每个INIT-在一个声明被单独分析,如果它是在由本身的声明。

这意味着你的代码是一样处理:

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

嗯 - 我不相信这意味着可预测的初始化顺序... – 2013-03-06 13:32:36

+3

仍然不能保证任何特定的顺序。 – 2013-03-06 13:33:05

+1

注97提供了一个解释,但使用“通常”的工作。然而,我相信这只意味着这条规则有明确的例外,但它不是“由编译器决定”。 – 2013-03-06 13:34:26