gpt4 book ai didi

c++ - 使用 `constexpr` 进行数组初始化

转载 作者:行者123 更新时间:2023-11-30 05:04:52 24 4
gpt4 key购买 nike

我知道在 C++11 中,我可以写

class foo {
static constexpr const char *one = "one";
}

但是,当我尝试对数组执行相同操作时

class bar {
static constexpr const float prim[4] = {2, 3, 5, 7};
}

(并在稍后引用它)我收到一个undefined reference 链接器错误。

这对数组来说是不可能的还是我在语法中遗漏了什么?

最佳答案

静态 constexpr 数据成员声明不是 C++11/14 中的定义,因此您不能 odr-use prim
要解决这个问题,请将以下语句放在您的 cpp 文件中的某个位置,就像您对任何其他非 constexpr 静态数据成员所做的那样:

constexpr const float bar::prim[4];

换句话说,这将返回一个 undefined reference :

struct bar {
static constexpr const float prim[4] = {2, 3, 5, 7};
};

int main() {
auto *foo = bar::prim;
}

这不是:

struct bar {
static constexpr const float prim[4] = {2, 3, 5, 7};
};

constexpr const float bar::prim[4];

int main() {
auto *foo = bar::prim;
}

因为在第二种情况下,您实际上是在定义 prim 而不是声明它,因此您可以获得它的地址,通过引用使用它,等等...

关于c++ - 使用 `constexpr` 进行数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647058/

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