使用以 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);
为什么第二种形式不起作用?还是我做错了什么?
编辑:
从 std::initializer_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。