簡體   English   中英

了解C ++中的初始化順序

[英]Understanding initialization order in C++

cppreference.com是一個官方頁面,可以依賴於那里提供的文檔嗎? 或者我應該只是閱讀語言文檔,以防我需要100%的確定性?

看看這篇文章。 首先,列出了幾種變量初始化方法:

根據上下文,初始化程序可以調用以下之一:

  • 值初始化
  • 直接初始化
  • 復制初始化
  • 列表初始化
  • 聚合初始化
  • 參考初始化

如果未提供初始化程序,則應用默認初始化規則。

下一部分解釋了非局部變量的兩個初始化階段:靜態和動態。 零初始化發生在靜態階段。 雖然默認初始化發生時沒有說出一個字。

當你轉到默認初始化的描述時,有一個例子說:

int n; // static non-class, a two-phase initialization is done:
       // 1) zero initialization initializes n to zero
       // 2) default initialization does nothing, leaving n being zero

基於此,我假設默認初始化在零初始化之后的某個時間發生(零初始化處於靜態初始化階段)。 但是這是實際有人在默認init相對於其他初始化時提到的地方。

cppreference是不完整的,還是信息在那里,我找不到它?

cppreference不是“官方的”; 這是一個維基。 任何人都可以編輯 它通常被認為是相當高的質量,但你應該始終把標准和標准作為你的規范,權威的信息來源。

至於初始化,您的解釋是正確的:首先進行零初始化, 然后進行任何其他類型的初始化(無論是默認初始化還是其他)。

這是我可以看到引用文本的唯一解釋,所以我沒有看到文章的哪一部分是“不完整的”。

cppreference.com是一個官方頁面

一點都不。

一個人可以依賴於那里提供的文件?

這是我所知道的最好的免費在線C ++文檔,它在Stackoverflow上有很好的聲譽。

或者我應該只是閱讀語言文檔,以防我需要100%的確定性?

C ++ ISO標准是唯一的官方來源,因此只有這樣才能給您100%的確定性。 標准文件不是免費的,但草稿是免費的 ,比如99.99%的確定性。

當然,“100%確定性”可能會產生誤導。 標准是由人類編寫的,並且永遠不會出現錯誤或矛盾,尤其是在處理像C ++這樣復雜的語言時。 如果是,那就不會有任何官方問題 甚至還有一個相對較新的關於零初始化的官方缺陷報告

您還必須記住, “C ++ ISO標准”可能意味着“迄今為止已發布的C ++ ISO標准之一” (1998年,2003年,2011年,2014年), “當前的C ++ ISO標准” (2014年) )或者甚至是即將到來的(2017年)。

所以,也許上面的句子應該被改寫成:A C ++ ISO標准是唯一的官方消息。

但是這是實際有人在默認init相對於其他初始化時提到的地方。

這不是真的。 例如, http//en.cppreference.com/w/cpp/language/zero_initialization說:

如非本地初始化中所述,非常規初始化的靜態和線程局部變量(因為C ++ 14)在進行任何其他初始化之前都是零初始化的。

整個網站可能還有其他類似的解釋。 但即使你引用的部分是明確提到它的唯一地方,為什么這會使解釋不完整呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM