C 0x の初期化子リストを使用してメンバー配列を初期化する方法

Mary-Kate Olsen
リリース: 2024-11-02 17:25:29
オリジナル
793 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート