2016-04-01 138 views
1

這條線如何工作? static bool const unused = (WillOnlyRunOnce(), true)函數執行一次

我偶然發現了一段與此類似的代碼,我無法理解它。

void WillOnlyRunOnce() { 
    std::cout << "WillOnlyRunOnce" << std::endl; 
} 
void Init() { 
    static bool const unused = (WillOnlyRunOnce(), true); 
} 
void main() 
{ 
    Init(); 
    Init(); 
    Init(); 
} 

回答

0

unused在程序運行時僅初始化一次。它被初始化爲(WillOnlyRunOnce(), true)評估的值。

(WillOnlyRunOnce(), true)是一個帶有逗號運算符的表達式。第一個表達式的值是WillOnlyRunOnce()返回的值。第二個表達式的值是true。整個表達式的值是最後一個表達式的值。在這種情況下,它是true

unused被初始化後,其值不會被重置。因此,(WillOnlyRunOnce(), true)不會得到多次評估。因此,即使Init被多次調用,WillOnlyRunOnce也只會被調用一次。

+0

感謝您的解釋。請您詳細說明'未使用初始化後,其值不會被重置'?重置在這裏意味着什麼?另外,如果「重置」會發生什麼? –

+1

@abhishek_naik,你需要一個不同的代碼行來重置它的值。由於變量具有「靜態」存儲持續時間,初始化行僅執行一次。 –

+0

@R Sahu,謝謝! :) –

0

Static local variable將僅在第一時間控制被初始化通過聲明和一次,所以WillOnlyRunOnce()將只有一次太調用。與限定聲明在塊範圍

變量靜態具有靜態存儲持續時間,但是通過它們的聲明被初始化第一次控制轉到(除非它們的初始化是零或恆定的初始化,這可前塊是執行首先進入)。 在所有進一步的調用中,該聲明都被跳過。