日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

小心處理 C++ 靜態(tài)變量中的陷阱

來源: 責編: 時間:2023-12-04 17:26:46 281觀看
導(dǎo)讀函數(shù)中的 static 變量static 變量的作用C++ 中 static 關(guān)鍵字的最后一個用途是在函數(shù)內(nèi)創(chuàng)建局部變量,這些變量在其作用域內(nèi)退出和進入時保持其值。函數(shù)內(nèi)的 static 變量類似于只能從該函數(shù)訪問的全局變量。static 變量

函數(shù)中的 static 變量

static 變量的作用

C++ 中 static 關(guān)鍵字的最后一個用途是在函數(shù)內(nèi)創(chuàng)建局部變量,這些變量在其作用域內(nèi)退出和進入時保持其值。函數(shù)內(nèi)的 static 變量類似于只能從該函數(shù)訪問的全局變量。static 變量的一個常見用途是“記住”特定函數(shù)是否已執(zhí)行過某個特定的初始化。例如,使用這種技術(shù)的代碼可能看起來像這樣:vEC28資訊網(wǎng)——每日最新資訊28at.com

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

然而,static 變量可能會引起混淆,通常有更好的方法來構(gòu)造你的代碼,以避免使用它們。在這種情況下,你可能想編寫一個類,其中構(gòu)造函數(shù)執(zhí)行所需的初始化。vEC28資訊網(wǎng)——每日最新資訊28at.com

注意:避免使用獨立的 static 變量。改為在對象內(nèi)維護狀態(tài)。然而,有時它們可以是有用的。一個例子是用于實現(xiàn) Meyer 的單例設(shè)計模式vEC28資訊網(wǎng)——每日最新資訊28at.com

注意:performTask() 的實現(xiàn)不是線程安全的;它包含了競態(tài)條件。在多線程環(huán)境中,你需要使用原子操作或其他機制來同步多個線程。vEC28資訊網(wǎng)——每日最新資訊28at.com

非局部變量的初始化順序

靜態(tài)數(shù)據(jù)成員和全局變量的初始化

在離開 static 數(shù)據(jù)成員和全局變量的主題之前,考慮這些變量的初始化順序。程序中的所有全局變量和 static 類數(shù)據(jù)成員都在 main() 開始之前初始化。在給定源文件中的變量按照它們在源文件中出現(xiàn)的順序初始化。例如,在以下文件中,保證 Demo::x 在 y 之前被初始化:vEC28資訊網(wǎng)——每日最新資訊28at.com

class Demo {public:    static int x;};int Demo::x { 3 };int y { 4 };

然而,C++ 對不同源文件中非局部變量的初始化順序沒有提供規(guī)范或保證。如果在一個源文件中有全局變量 x,在另一個源文件中有全局變量 y,你無法知道哪個會先初始化。通常,這種缺乏規(guī)范不會引起關(guān)注。然而,如果一個全局或 static 變量依賴于另一個,則可能會有問題。vEC28資訊網(wǎng)——每日最新資訊28at.com

回想一下,對象的初始化意味著運行它們的構(gòu)造函數(shù)。一個全局對象的構(gòu)造函數(shù)可能會訪問另一個全局對象,假設(shè)它已經(jīng)構(gòu)造。如果這兩個全局對象在兩個不同的源文件中聲明,你不能指望一個在另一個之前構(gòu)造,也不能控制初始化順序。這個順序可能因不同的編譯器或同一編譯器的不同版本而異,甚至當你只是在項目中添加另一個文件時,順序也可能改變。vEC28資訊網(wǎng)——每日最新資訊28at.com

警告:不同源文件中非局部變量的初始化順序是未定義的。vEC28資訊網(wǎng)——每日最新資訊28at.com

非局部變量的銷毀順序

非局部變量的銷毀順序與它們被初始化的順序相反。不同源文件中的非局部變量以未定義的順序初始化,這意味著它們的銷毀順序也是未定義的。vEC28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-37677-0.html小心處理 C++ 靜態(tài)變量中的陷阱

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++構(gòu)造函數(shù):初始化對象成員變量的關(guān)鍵

下一篇: Python 數(shù)據(jù)庫操作模塊大揭秘:帶你輕松掌握這六種常見模塊!

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 仙桃市| 宁国市| 福海县| 铜山县| 琼海市| 延边| 新巴尔虎右旗| 龙南县| 克山县| 西充县| 交口县| 祁阳县| 锦屏县| 新营市| 雷州市| 祥云县| 临猗县| 宜兴市| 大安市| 三门峡市| 错那县| 莱州市| 上杭县| 新宁县| 郯城县| 枣庄市| 卢龙县| 特克斯县| 鲁山县| 利津县| 读书| 岐山县| 南昌县| 贺兰县| 南江县| 绍兴市| 随州市| 唐山市| 中江县| 永寿县| 乌拉特后旗|