gpt4 book ai didi

c++ - 为什么在类中初始化的非整数静态数据成员必须是 constexpr?

转载 作者:IT老高 更新时间:2023-10-28 21:58:28 25 4
gpt4 key购买 nike

类定义中初始化的静态整型数据成员可以声明为constconstexpr,但类定义中初始化的非整型静态数据成员必须是 constexpr:

class MyClass {
static const int w = 5; // okay
static constexpr int x = 5; // okay
static const float y = 1.5; // error!
static constexpr float z = 1.5; // okay
};

有人知道为什么不允许声明 y 吗?使其非法的标准部分是 9.4.2/3,但为什么它是非法的?

最佳答案

在 C++11 之前,您无法在类声明中初始化非整数/枚举类型的静态成员(但您可以在类声明之外)。管理 constexpr 的规则将其向前推进,但允许您在类声明中使用 constexpr 对其进行初始化(因此您不再需要以下代码):

struct A
{
static const float pi;
};

const float A::pi = 3.1415;

这条规则的副作用之一是简化你的类结构而不是让它变得丑陋(就像上面的代码)。

在 C++11 添加 constexpr 之前出现这种情况的原因之一是标准没有指定如何实现浮点(它留给处理器/架构- 例如,当您说 float x = 1.6f 时,在大多数系统上实际上是 1.6000000000024

关于c++ - 为什么在类中初始化的非整数静态数据成员必须是 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19575258/

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