2013-03-06 194 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