我有一些常量,只需要在編譯時使用,以簡化代碼,所以我不需要在運行時可用的實際變量。如何在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