【发布时间】:2021-06-14 11:25:12
【问题描述】:
我正在尝试创建一个由 std::initializer_list 初始化的示例数组类。我想在编译时检查初始化列表的大小是否不大于数组的大小。由于静态断言只能计算 constexpr,因此这段代码不会被编译。
#include<initializer_list>
#include<cstddef>
template <typename T , size_t _size>
class array
{
private:
T arr[_size];
public:
array()
{
}
array(std::initializer_list<T> arrList)
{
static_assert(_size>arrList.size(),"too many initializers"); // error: non-constant condition for static assertion
}
~array()
{
}
};
int main()
{
array<int,4> arr = {1,2,3,4,5};
return 0;
}
std::array 已经有了这个功能,但是我在头文件中找不到它的实现。
#include<array>
int main()
{
std::array<int,5> arr= {1,2,3,4,5,6}; // error: too many initializers for ‘std::array<int, 5>’
return 0;
}
【问题讨论】:
-
对于
array,它没有明确实现。array使用聚合初始化,编译器负责处理,而不是 STL。
标签: c++ arrays stl initializer-list