声明浮点常量时出错

Error declaring float constants

本文关键字:出错 浮点常量 声明      更新时间:2023-10-16

我正在声明一个需要一些公共常量的类。我的想法是这样声明:

class MyClass {
 public:
  const int kIntConst = 1234;
  const float kFloatConst = 1234.567f;
  // ...methods...
};

这种方法适用于int常数,但对于float常数则失败,错误如下:

error C2864: 'MyClass::kFloatConst' : only static const integral data members can be initialized within a class

好吧,我确实理解这个错误消息。它说我不能在类声明中声明浮点(非整数)常量。所以,问题是:为什么!?为什么它可以是int而不能是float

我知道如何解决这个问题。将kFloatConst声明为静态常量成员,然后在.cpp中进行初始化可以解决问题,但这不是我想要的。我需要一个编译时常量(一个可以由编译器优化的常量),而不是一个需要.obj文件链接的常量类成员。

使用宏可能是一种选择,但宏没有命名空间,我不喜欢全局定义的常量。

一般规则是不能在类声明中定义常量。

还有一个例外,积分常数无论如何都是允许的。所以int常数不是规则,而是例外。