C++ 为什么即使成员函数是constexpr,也需要constexpr?
除非我将constexpr置于初始值设定项\u列表之前,否则不会编译以下内容:C++ 为什么即使成员函数是constexpr,也需要constexpr?,c++,c++11,initializer-list,constexpr,C++,C++11,Initializer List,Constexpr,除非我将constexpr置于初始值设定项\u列表之前,否则不会编译以下内容: constexpr std::initializer_list<int> il = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::array<int, il.size()> a; 通过写入std::数组a您声称il.size()可以在编译时以恒定的结果进行计算,从而允许模板实例化 这就是为什么初始值设定项\u list::size()方法和il变量都
constexpr std::initializer_list<int> il = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
std::array<int, il.size()> a;
通过写入
std::数组a
您声称il.size()
可以在编译时以恒定的结果进行计算,从而允许模板实例化
这就是为什么
初始值设定项\u list::size()
方法和il
变量都需要声明为constexpr
的原因 甚至不清楚constexpr std::initializer\u list li={..}代码>在C++11中有效;它将用C++1y编写。
constexpr size_type size() const;
std::initializer_list<int> il = rand() ? std::initializer_list<int>{1}
: std::initializer_list<int>{1,2,3};
std::array<int, il.size()> a;
struct S
{
int m;
constexpr int foo() const { return m; }
};
S s{rand()};
int j = s.foo(); // only known at run-time
constexpr S cs{42};
int arr[cs.foo()]; // compile-time constant