以下に示すように、 std::initializer_list を引数として取る関数
int sumOf(std::initializer_list<int> numbers) {
int sum = 0;
for (auto x : numbers) {
sum += x;
}
return sum;
}
このコードは機能します
auto sum = sumOf({ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
しかし、これではありません
int i[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
auto x = sumOf(i);
2 番目の形式が機能しないのはなぜですか? それとも私は何か間違ったことをしていますか?
編集:
std::intializer_list の gcc 4.7.2 実装から、intializer_list のコンストラクターはプライベートであり、コンパイラーは配列のサイズを渡す必要があります。
// The compiler can call a private constructor.
constexpr initializer_list(const_iterator __a, size_type __l)
: _M_array(__a), _M_len(__l) { }
コンパイラが変数「i」から配列のサイズを判断できない場合があると思います。その場合、静的配列を intializer_list に渡すことは、コンパイラによってサポートされません (?)。