「最令人困擾的解析」歧義:解開統一初始化器
在C 領域,可能會出現「最令人煩惱的解析」歧義當遇到統一初始化器時,如下例所示程式碼:
<code class="cpp">class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // What is Timer() ? And what type is dv? int time_keeper(Timer()); // This is a function right? And why isn't the argument "Timer (*) ()"? return 0; }</code>
解釋dv
在auto dv = Timer();行中,dv 的類型取決於Timer() 的解釋。這可以是:
在這種情況下,它表示建構函式調用,導致 dv 是類型的物件計時器。 auto 關鍵字根據初始值設定項目推斷類型。
理解 time_keeper
在 int time_keeper(Timer()); 行中,宣告了一個名為 time_keeper 的函數。正如人們所期望的那樣,該參數不是 Timer (*) () 類型的函數指標。相反,它表示一個指向返回 Timer 且不帶參數的函數的指標。這是因為:
In結論
「最令人煩惱的解析」歧義凸顯了在解釋 C 中的某些結構時可能會出現混亂。理解統一初始化和函數衰減的概念對於正確理解此類場景至關重要。
以上是`Timer()` 是建構函式呼叫還是函式呼叫? C 語言中「最令人煩惱的解析」歧義的詳細內容。更多資訊請關注PHP中文網其他相關文章!