gpt4 book ai didi

c++ - 为什么我需要在 constexpr 类中对非静态数组成员进行成员初始化?

转载 作者:可可西里 更新时间:2023-11-01 18:31:06 26 4
gpt4 key购买 nike

下面的代码迫切需要 : 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';
}

但是为什么?我有过这样的想法:“值也可以以非 constexpr 方式初始化,而 values() 确实明确表示我们以符合 constexpr 的方式初始化它”。但是省略 : values() 是不是同样清楚?

最佳答案

考虑语义。

从初始化列表中省略成员将执行默认初始化,在这种情况下,这会使数组具有未指定的值。这否定了 constexpr 的目的。

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

关于c++ - 为什么我需要在 constexpr 类中对非静态数组成员进行成员初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com