類內初始化器:為什麼括號或等於限制?
在 C 11 中,類別內初始化器必須符合特定語法:它們必須括在花括號中或直接跟在等號 (=) 後面。但是,不允許使用括號。理解此要求背後的基本原理至關重要。
防止語法歧義
此限制源自於潛在的語法歧義。考慮以下類別:
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing(Overloaded); };
如果類別內初始值設定項允許使用括號,則第 4 行是不明確的。它可能被解釋為名為“confusing”的成員函數的聲明,該函數接受“Overloaded”類型的參數,或者被解釋為初始化為資料成員“Overloaded”的值的“int”成員變數“confusing”的定義。
括號清晰
透過要求類內初始化器使用大括號,C 11消除了這種歧義。修改前面的範例:
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing{Overloaded}; };
現在,很明顯「confusing」是初始化為「Overloaded」值的整數成員,因為函數參數不允許使用括號。
C 11 中的這種語法限制確保了函數宣告和成員變數宣告/初始化之間的明確區分,從而增強了程式碼可讀性並避免了解釋上的混亂類別內初始化器。
以上是為什麼 C 11 類別內初始化器不能使用括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!