我有一些常量,只需要在编译时使用以简化代码,因此我不需要在运行时可用的实际变量。
传统上,这是通过 #define NAME 123
来完成的,但我想要一个类型安全的替代方案。
在类的外部,您可以使用 const int name = 123;
,这很好用,但似乎无法将其放在类内。例如:
class Example {
public:
const double usPerSec = 1000000.0;
};
double usOneMinute = 60 * Tempo::usPerSec;
可以与Visual C++一起使用,但无法与GCC一起使用:
error: non-static const member ‘const double Example::usPerSec’,
can’t use default assignment operator
您可以通过将其设置为静态来修复它,但是这时Visual C++会发出警告:
error C2864: 'Example::usPerSec' : a static data member with an in-class
initializer must have non-volatile const integral type
type is 'const double'
我猜这意味着VC++只接受“static const int”。 我想避免在构造函数中设置值,因为那样我需要在运行时拥有类的实例才能访问该值,而我真正想要的是像“#define”一样在编译时处理所有内容。 那么,如何在类内定义一个“double”常量,而不必将其设置为全局或使用“#define”,并且可以在没有类实例的情况下工作,并且可以与主要的C++03编译器一起使用?
std::numeric_limits<>
,我觉得这是一个有用的点,值得加一。 - Angew is no longer proud of SO