類初始化器中的歧義:大括號和等於的作用
在C 11 中,類內成員初始化器只能使用curly 定義大括號({}) 或等號(=)。此限制提出了一個問題:為什麼不允許使用括號來實現此目的。
此限制的一個主要原因在於可能存在語法歧義。考慮以下類別:
class BadTimes { public: struct Overloaded; int Overloaded; // Data member int confusing(Overloaded); // Function declaration };
如果初始化器允許使用括號,則行「intfused(Overloaded);」可能會含糊不清。如果初始化器使用括號,它可以被解釋為函數宣告(如上所示)或成員變數初始化:
int confusing{Overloaded};
為了消除這種歧義,需要花括號或等號。這確保了成員變數初始值設定項和函數宣告之間不會混淆:
class BadTimes { public: struct Overloaded; int Overloaded; int confusing{Overloaded}; // Member variable initialized with Overloaded };
以上是為什麼 C 11 類別內初始值設定項不允許使用括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!