隨着函數採取的std :: initializer_list作爲參數的功能像下面所示傳遞原始陣列的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);
爲什麼第二種形式n工作嗎?或者我做錯了什麼?
編輯:
從GCC 4.7.2執行的std :: intializer_list的,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。
但是'{0,1,2,3,4,5,6,7,8,9,10}'確實創建了一個'std :: initializer_list'。 – kennytm
那麼,通過一個初始化器列表,除了該函數,其他通過和數組,還有什麼應該發生。初始化列表不僅僅是一個數組。把它改成'auto i = {...};',不知道這是否有效。 –
@ChristianRau - 它適用於'auto i = {...};'但是「i」似乎不再是一個int數組。 –