我正在声明一个需要一些公共常量的类。我的想法是宣布这样的:
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
好吧,我做了解此错误消息。它说我不能在类声明中声明一个float(非整数)常量。所以,问题是:为什么!?为什么它可以int
而不是float
?
我知道如何解决这个问题。将kFloatConst
声明为静态const成员并稍后在.cpp中初始化可以解决问题,但这不是我想要的。我需要一个编译时常量(一个可以通过编译器优化的常量),而不是需要.obj文件链接的常量类成员。
使用宏可以是一个选项,但宏没有命名空间,我不喜欢全局定义的常量。
答案 0 :(得分:2)
一般规则是你不能在类声明中定义常量。
然后有一个异常,即无论如何都允许使用 积分常量。所以int
常量不是规则,而是例外。