簡體   English   中英

靜態全局變量初始化順序

[英]static global variables initialization order

在我在這里找到的許多答案都說了以下幾個字:

單個翻譯單元(源文件)中的全局變量按其定義的順序初始化。

要么

在同一個編譯單元中,訂單定義明確:與定義相同的順序。

等等

但是我在哪里可以看到C ++標准中的這些詞? 我想得到一個或幾個具體的段落,其中描述了這種行為。 我自己找不到,我不知道該問誰。

6.6.3非局部變量的動態初始化[ basic.start.dynamic ]

  1. 如果變量是隱式或顯式實例化的特化,則動態初始化具有靜態存儲持續時間的非局部變量是無序的,如果變量是不是隱式或顯式實例化的特化的內聯變量,則是部分排序的,否則是有序的。 [注意:明確專門的非內聯靜態數據成員或變量模板特化已經訂購了初始化。 - 結束說明]
  2. 具有靜態存儲持續時間的非局部變量V和W的動態初始化按如下順序排序:
    • 如果V和W在單個轉換單元中有序初始化並且在W之前定義了V,則在初始化W之前對V的初始化進行排序。
    • 如果V具有部分有序初始化,則W沒有無序初始化,並且在定義W的每個轉換單元中W定義為V之前,則
      • 如果程序啟動主線程(6.6.1)以外的線程(4.7),則V的初始化強烈發生在W的初始化之前;
      • 否則,在初始化W之前對V的初始化進行排序。
    • 否則,如果程序在初始化V或W之前啟動除主線程之外的線程,則未指定V和W的初始化發生在哪些線程中; 如果它們出現在同一個線程中,則初始化是未排序的。
    • 否則,V和W的初始化是不確定的。

引自N4659,格式調整為與此處支持的降價一起使用。

有關動態初始化的確切定義,請參見前面的第6.6.2節[basic.start.static]。

暫無
暫無

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

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