假設我們有如下函式,由多個執行緒同時執行:
void foo()
{
static SomeClass s{get_first_arg(), get_second_arg()};
}
get_first_arg我的問題是將執行多少次get_second_arg- 恰好一次,或ThreadCount次,還是未指定/實作定義的行為?
uj5u.com熱心網友回復:
區域靜態變數s僅初始化一次,并且第一次控制通過該變數的宣告。這可以從靜態區域變數的檔案中看出:
在塊范圍內使用說明符 static 宣告的變數具有靜態存盤持續時間,但在控制第一次通過它們的宣告時被初始化(除非它們的初始化是零或常量初始化,這可以在第一次進入塊之前執行)。在所有進一步的呼叫中,宣告被跳過。
(強調我的)
這反過來意味著引數get_first_arg()和get_second_arg()將只被評估一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520366.html
標籤:C 多线程
