为什么我需要在constexpr类中成员初始化非静态数组成员?

Ice*_*ire 7 c++ constexpr c++14

下面的代码迫切需要: values()编译,至少在ideone :: C++ 14中:

#include <iostream>

template<int N>
struct Table
{
    constexpr Table() : values()
    {
        for (auto i = 0; i < N; ++i)
        {
            values[i] = i * i * i;
        }
    }
    int values[N];
};

int main() {
    constexpr auto a = Table<1000>();
    for (auto x : a.values)
        std::cout << x << '\n';
}
Run Code Online (Sandbox Code Playgroud)

但为什么?我有想法"值也可以非constexpr方式初始化,而值()明确表示我们以符合constexpr的方式初始化它".但是并不是: values()一目了然吗?

Sto*_*ica 5

考虑语义.

从初始化列表中省略成员将执行默认初始化,在这种情况下,数组将保留未指定的值.这否定了一个目的constexpr.

初始化数组的值在每个数组元素上执行零初始化(因为这是内置类型的数组).