use*_*565 14 c++ initializer-list constexpr c++11
除非我在initializer_list之前放置constexpr,否则以下内容无法编译:
constexpr std::initializer_list<int> il = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
std::array<int, il.size()> a;
Run Code Online (Sandbox Code Playgroud)
但是initializer_list的大小是constexpr:
constexpr size_type size() const;
Run Code Online (Sandbox Code Playgroud)
dyp*_*dyp 32
std::initializer_list<int> il = rand() ? std::initializer_list<int>{1}
: std::initializer_list<int>{1,2,3};
std::array<int, il.size()> a;
Run Code Online (Sandbox Code Playgroud)
这就是为什么.
甲constexpr
成员函数是一个函数可以常量表达式内执行,它并不一定产生结果是一个编译时间常数.例如:
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
Run Code Online (Sandbox Code Playgroud)