首頁  >  文章  >  後端開發  >  如何在 C 0x 中使用初始化列表初始化成員數組?

如何在 C 0x 中使用初始化列表初始化成員數組?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 17:25:29809瀏覽

How to Initialize Member Arrays with Initializer Lists in C  0x?

使用初始值設定項列表初始化成員數組

在C 0x 中,嘗試使用初始值設定項列表初始化成員數組時,可能會遇到「賦值中的類型不相容」錯誤.

要解決此問題,請考慮使用可變參數模板建構函數:

<code class="cpp">struct foo {
    int x[2];
    template <typename... T>
    foo(T... ts) : x{ts...} {}
};

int main() {
    // Usage
    foo f1(1, 2);   // OK
    foo f2{1, 2};   // Also OK
    foo f3(42);    // OK; x[1] zero-initialized
    foo f4(1, 2, 3); // Error: too many initializers
    foo f5(3.14);  // Error: narrowing conversion not allowed
    foo f6("foo"); // Error: no conversion from const char* to int
}</code>

如果不需要保留「const」狀態,您也可以使用函數來載入數組值:

<code class="cpp">struct foo {
    int x[2];
    foo(std::initializer_list<int> il) {
        std::copy(il.begin(), il.end(), x);
    }
};</code>

但是,這種方法放棄了編譯時邊界檢查。

以上是如何在 C 0x 中使用初始化列表初始化成員數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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