初始化 std::数组与隐含长度

Initialize std::array with implied length

本文关键字:std 数组 初始化      更新时间:2023-10-16

在C中你可以做int a[] = {1,2,3,4,5},但是C++11 std::array<int> a = {1,2,3,4,5}会给出"模板参数太少"的编译错误。有什么办法吗?

你能拥有的最好的是 make_array ,像这样:

template<typename T, typename...Ts>
constexpr std::array<T, 1 + sizeof...(Ts)> make_array(T&& head, Ts&&...tail)
{
     return {{ std::forward<T>(head), std::forward<Ts>(tail)... }};
}

std::array 的实现:

template<typename T, std::size_t N>
struct array {
    T array_impl[N];
};

所以这应该有效:

std::array<std::int, 5> a = {{ 1, 2, 3, 4, 5 }};

这基本上就像(因为编译器同意删除内部大括号。

std::array<std::int, 5> a = { 1, 2, 3, 4, 5 };