在考虑问题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'不会复制基础对象。” –