【发布时间】:2015-03-14 20:14:51
【问题描述】:
我有一些常量只需要在编译时使用来简化代码,所以我不需要运行时可用的实际变量。
传统上,这是使用 #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 编译器?
【问题讨论】:
标签: c++ class constants class-variables