1

C++11でメンバー配列をデフォルトで初期化するにはどうすればよいですか? 私はバウンドを提供する必要があるようです。

class Example {
    const char* num2letter[10]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
};

正常にコンパイルされます。しかし、境界を省略すると、コンパイラ エラーが発生します。

エラー: 'const char* [0]' const char* num2letter[]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs" の初期化子が多すぎます、「tuv」、「wxyz」};

コンパイラは、集約初期化を使用したローカル配列定義の場合と同じように境界を推測できないのはなぜですか?

4

1 に答える 1

1

デフォルトのメンバー初期化子はまさにそれです - デフォルトです。コンストラクターが異なる値を提供する可能性を常に考慮しています。num2letterのコンストラクターのいずれかから初期化される可能性がありExample、その時点でデフォルトの初期化子は使用されません...そのため、型を明示的に指定する必要があります。宣言は、初期化子なしで有効でなければなりません。

これは、次のようなことができないのと同じ理由です。

class Example {
    auto i = 4;
};
于 2016-03-22T17:28:31.503 に答える