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

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

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

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

函數中的 static 變量

static 變量的作用

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

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

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

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

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

非局部變量的初始化順序

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

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

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

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

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

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

非局部變量的銷毀順序

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

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

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

上一篇: C++構造函數:初始化對象成員變量的關鍵

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

標簽:
  • 熱門焦點
  • 小米降噪藍牙耳機Necklace分享:聽一首歌 讀懂一個故事

    在今天下午的小米Civi 2新品發布會上,小米還帶來了一款新的降噪藍牙耳機Necklace,我們也在發布結束的第一時間給大家帶來這款耳機的簡單分享?,F在大家能見到最多的藍牙耳機
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛?,F在,我們就開始今
  • 雅柏威士忌多款單品價格大跌,泥煤頂流也不香了?

    來源 | 烈酒商業觀察編 | 肖海林今年以來,威士忌市場開始出現了降溫跡象,越來越多不斷暴漲的網紅威士忌也開始悄然回歸市場理性。近日,LVMH集團旗下蘇格蘭威士忌品牌雅柏(Ardbeg
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top 主站蜘蛛池模板: 嘉兴市| 许昌县| 方正县| 石柱| 邵武市| 大关县| 台北县| 二连浩特市| 肥西县| 乌拉特后旗| 武山县| 泸定县| 新乡市| 兰溪市| 城市| 汝南县| 东城区| 合山市| 武安市| 嘉鱼县| 峨山| 吴江市| 景德镇市| 辉县市| 望奎县| 虎林市| 延津县| 沧州市| 桦川县| 敦煌市| 兴义市| 黎平县| 伊宁县| 文山县| 娄底市| 芮城县| 沙坪坝区| 三门峡市| 鲁甸县| 宣武区| 天台县|