声明浮点常量时出错
Error declaring float constants
我正在声明一个需要一些公共常量的类。我的想法是这样声明:
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
常数不是规则,而是例外。
相关文章:
- 如何根据模板类型定义浮点常量?
- 将节点数组(可变长度)转换为常量浮点**以调用opencv.calcHist
- 浮点到整数转换出错(即使浮点数已经是整数)
- 将常量浮点*转换为垫子
- 尝试使用浮点参数运行重载函数时出错
- 在不同翻译单元中具有静态存储持续时间的依赖非局部常量浮点变量的常量初始化
- 浮点数学出错使用来自 boost::multiprecision 的cpp_bin_float
- C中的浮点运算出错
- 浮点常量不精确的警告
- 模板元编程和浮点常量系数
- 如何编写浮点常量
- 为什么在C++17中使用十六进制浮点常量
- 如何在模板中定义浮点常量.避免在运行时强制转换
- 浮点常量的编译时转换
- C++浮点常量总是存储在静态内存中吗
- 声明浮点常量时出错
- 如何初始化类内浮点常量
- C/ c++中浮点常量的紧凑无损表示
- 在MATLAB中用十六进制浮点常量解析文件
- 模板化代码中的浮点常量