我有一些常量,只需要在编译时使用,以简化代码,所以我不需要在运行时可用的实际变量。如何在C++类中定义编译时(静态)常量?
传统上这样做的方式是#define NAME 123
,但我想要一个类型安全的替代方案。
以外的类可以const int name = 123;
哪些工作正常,但似乎不可能把它放在课堂上。例如这样的:
class Example {
public:
const double usPerSec = 1000000.0;
};
double usOneMinute = 60 * Tempo::usPerSec;
工程用Visual C++,但不与海湾合作委员会的工作:
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编译器一起工作?
'+ 1'提到'std :: numeric_limits <>',我觉得这很有用。 – Angew