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

冰火

急需: 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()那么清楚吗?

讲故事的人-Unslander Monica

考虑一下语义。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

弹性数组成员的非静态初始化?

为什么灵活数组成员的静态初始化有效?

在类模板中使用条件运算符初始化静态constexpr char数组成员

灵活数组成员的静态初始化

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

为什么我不能在类中初始化非常量静态成员或静态数组?

为什么使用灵活的数组成员进行的结构初始化无效但对于固定大小的数组成员却有效?

初始化列表中的零初始化数组成员

初始化固定的C数组成员结构

数组成员的初始化程序无效

删除类的复制构造函数时,初始化类的数组成员

继承:构造函数,在C ++ 11中初始化C之类的基类的数组成员

当将值分配给结构初始化程序中的字符串数组成员时,为什么会收到“ int-conversion”警告?

在可变参数模板类的构造函数中初始化元组成员

将初始化列表传递给C ++中的数组成员

C ++中的struct char数组成员初始化

为什么类类型的成员需要初始化?

通过基类构造函数从驱动类模板值初始化基类数组成员变量

为什么不能在公共头文件中初始化静态类成员?

为什么无法在类主体中初始化静态const字符串成员

初始化类模板的静态 constexpr 成员变量

如何初始化具有 unint_t 作为灵活数组成员的结构?

在编译时初始化灵活的数组成员

如何通过引用初始化函数内部的结构数组成员

初始化struct数组成员的最有效方法?

数组成员可以自引用初始化吗?

为什么在调用对象实例后静态数组成员变量什么也不显示?

为什么constexpr静态成员(类型类)需要定义?

通过使用派生类的静态constexpr数据成员初始化基类的静态constexpr数据成员