成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

小心處理 C++ 靜態變量中的陷阱

開發 前端
非局部變量的銷毀順序與它們被初始化的順序相反。不同源文件中的非局部變量以未定義的順序初始化,這意味著它們的銷毀順序也是未定義的。

函數中的 static 變量

static 變量的作用

C++ 中 static 關鍵字的最后一個用途是在函數內創建局部變量,這些變量在其作用域內退出和進入時保持其值。函數內的 static 變量類似于只能從該函數訪問的全局變量。static 變量的一個常見用途是“記住”特定函數是否已執行過某個特定的初始化。例如,使用這種技術的代碼可能看起來像這樣:

void performTask() {
    static bool initialized { false };
    if (!initialized) {
        cout << "initializing" << endl;
        // 執行初始化。
        initialized = true;
    }
    // 執行期望的任務。
}

然而,static 變量可能會引起混淆,通常有更好的方法來構造你的代碼,以避免使用它們。在這種情況下,你可能想編寫一個類,其中構造函數執行所需的初始化。

注意:避免使用獨立的 static 變量。改為在對象內維護狀態。然而,有時它們可以是有用的。一個例子是用于實現 Meyer 的單例設計模式

注意:performTask() 的實現不是線程安全的;它包含了競態條件。在多線程環境中,你需要使用原子操作或其他機制來同步多個線程。

非局部變量的初始化順序

靜態數據成員和全局變量的初始化

在離開 static 數據成員和全局變量的主題之前,考慮這些變量的初始化順序。程序中的所有全局變量和 static 類數據成員都在 main() 開始之前初始化。在給定源文件中的變量按照它們在源文件中出現的順序初始化。例如,在以下文件中,保證 Demo::x 在 y 之前被初始化:

class Demo {
public:
    static int x;
};

int Demo::x { 3 };
int y { 4 };

然而,C++ 對不同源文件中非局部變量的初始化順序沒有提供規范或保證。如果在一個源文件中有全局變量 x,在另一個源文件中有全局變量 y,你無法知道哪個會先初始化。通常,這種缺乏規范不會引起關注。然而,如果一個全局或 static 變量依賴于另一個,則可能會有問題。

回想一下,對象的初始化意味著運行它們的構造函數。一個全局對象的構造函數可能會訪問另一個全局對象,假設它已經構造。如果這兩個全局對象在兩個不同的源文件中聲明,你不能指望一個在另一個之前構造,也不能控制初始化順序。這個順序可能因不同的編譯器或同一編譯器的不同版本而異,甚至當你只是在項目中添加另一個文件時,順序也可能改變。

警告:不同源文件中非局部變量的初始化順序是未定義的。

非局部變量的銷毀順序

非局部變量的銷毀順序與它們被初始化的順序相反。不同源文件中的非局部變量以未定義的順序初始化,這意味著它們的銷毀順序也是未定義的。

責任編輯:趙寧寧 來源: coding日記
相關推薦

2023-10-07 15:53:05

C/C++靜態變量內存

2011-06-02 14:25:45

靜態變量

2011-05-24 16:58:52

CC++

2023-12-29 08:27:36

C語言靜態變量開發

2009-08-27 10:44:21

C#靜態變量

2011-08-10 17:16:01

Objective-C靜態變量

2011-05-26 15:10:15

靜態變量

2011-07-11 16:13:01

Java靜態變量實例變量

2009-08-31 10:00:07

C#靜態變量

2018-07-12 13:47:04

數據科學變量虛擬變量

2010-01-25 10:25:19

C++變量

2009-08-31 09:47:22

C#靜態變量初始化

2009-08-31 10:18:00

C#靜態變量定義C#靜態變量

2024-04-29 14:39:20

2011-03-07 10:10:35

MySQL處理空值

2010-01-28 11:08:09

C++變量

2010-01-18 17:57:02

靜態數據

2010-08-05 09:27:03

Flex應用

2024-02-22 18:07:17

C++靜態成員代碼

2020-07-27 08:05:56

C++語言后端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成视频在线观看 | 国产一区二区三区色淫影院 | 久草久草久草 | 99精品视频免费在线观看 | 精品一区二区av | 一区二区三区免费在线观看 | 欧美日韩视频在线 | 亚洲视频在线播放 | www97影院| 欧美一区二区在线播放 | 国产伦一区二区三区久久 | 91最新入口 | 午夜黄色 | 午夜午夜精品一区二区三区文 | 国产一区二 | aaa在线观看 | 日韩精品一二三区 | 狠狠综合久久av一区二区老牛 | 午夜爱爱网 | av中文字幕在线观看 | 成人h视频在线 | 午夜av成人| 久草www | 国内精品久久久久久久 | 亚洲精品综合 | 成人在线观看免费 | 亚洲免费成人av | 亚洲精品一区二区三区四区高清 | 欧美日韩一区二区三区不卡视频 | 在线免费观看黄色网址 | 亚洲精品国产成人 | 午夜免费观看体验区 | 逼逼网 | 国产精品亚洲一区二区三区在线观看 | 一本一道久久a久久精品综合蜜臀 | 国产精品视频不卡 | 81精品国产乱码久久久久久 | 97人人干| 欧美一级www片免费观看 | 日韩精品一区二区久久 | av一级|