首頁 >後端開發 >C++ >為什麼 C 11 中的類別內初始化器僅限於 `=` 和 `{}`?

為什麼 C 11 中的類別內初始化器僅限於 `=` 和 `{}`?

Susan Sarandon
Susan Sarandon原創
2024-12-19 01:50:09656瀏覽

Why are In-Class Initializers in C  11 Restricted to `=` and `{}`?

類別內初始化器的語法限制

在C 11 中,類別內初始化器只能使用等號(=) 或大花號大括號{} 為成員賦值。為什麼會出現這種情況?

歧義緩解

大括號語法強制明確的程式碼解釋。考慮這個例子:

class Example {
    struct Inner;
    int member;

    int conflicting(Inner); // Function declaration or member initialization?
};

如果沒有大括號限制,程式碼片段可能會不明確。第一行可以解釋為函數宣告或使用括號的成員初始化。

class Example {
    struct Inner;
    int member;

    int conflicting{Inner}; // Clearly a member initialization
};

大括號闡明衝突是初始化為 Inner 值的成員。

額外的清晰度

使用大括號還可以透過分隔成員聲明來提供額外的清晰度和初始化。這可以增強可讀性並減少誤解的可能性。

以上是為什麼 C 11 中的類別內初始化器僅限於 `=` 和 `{}`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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