首頁 >後端開發 >C++ >為什麼 C 11 類別內初始化器不能使用括號?

為什麼 C 11 類別內初始化器不能使用括號?

DDD
DDD原創
2024-12-21 13:50:12271瀏覽

Why Can't C  11 In-Class Initializers Use Parentheses?

類內初始化器:為什麼括號或等於限制?

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn