在考慮問題std::initializer list from already existing std::array without enumerating each element的解決方案時,我開發了類似bolov的機制,但沒有構造對象,而只是構造器列表。我很驚訝我的解決方案不起作用,我無法弄清楚爲什麼。通過枚舉值構造initializer_list包含隨機值
#include <initializer_list>
#include <iostream>
#include <array>
template<typename T, std::size_t N, std::size_t... Is>
std::initializer_list<T> array_to_init_list_helper(std::array<T, N> arr, std::index_sequence<Is...>)
{
return {arr[Is]...};
}
template<typename T, std::size_t N>
std::initializer_list<T> array_to_init_list(std::array<T, N> arr)
{
return array_to_init_list_helper(arr, std::make_index_sequence<N>{});
}
int main()
{
std::array<int, 5> arr{1, 2, 3, 4, 5};
auto init_list = array_to_init_list(arr);
for (auto val : init_list)
std::cout << val << " ";
}
我getting random values,而我希望得到的arr
值。
['std :: initializer_list'](http://en.cppreference.com/w/cpp/utility/initializer_list)不是容器 - 它基本上只是一對指針。實際上,'array_to_init_list_helper'返回指向局部變量的指針。從文章:「複製'的std :: initializer_list'不會複製基礎對象。」 –