Ich habe einige Konstanten, die nur zur Kompilierzeit verwendet werden müssen, um den Code zu vereinfachen, also brauche ich die zur Laufzeit verfügbaren Variablen nicht.Wie definiert man während einer C++ Klasse eine konstante Konstante für die Kompilierung?
Traditionell wurde dies mit #define NAME 123
gemacht, aber ich möchte eine typsichere Alternative.
Außerhalb der Klassen können Sie const int name = 123;
, die gut funktioniert, aber es scheint nicht möglich, dies innerhalb einer Klasse zu setzen. Zum Beispiel diese:
class Example {
public:
const double usPerSec = 1000000.0;
};
double usOneMinute = 60 * Tempo::usPerSec;
Arbeiten mit Visual C++, aber mit GCC funktioniert nicht:
error: non-static const member ‘const double Example::usPerSec’,
can’t use default assignment operator
Sie können das Problem beheben, indem sie statisch zu machen, aber dann Visual C++ klagt:
error C2864: 'Example::usPerSec' : a static data member with an in-class
initializer must have non-volatile const integral type
type is 'const double'
Ich vermute, das bedeutet VC++ akzeptiert nur static const int
.
Ich möchte vermeiden, den Wert im Konstruktor zu setzen, weil ich dann eine Instanz der Klasse zur Laufzeit benötigt, um auf den Wert zuzugreifen, während ich eigentlich alles zur Kompilierzeit behandelt werden möchte wie mit #define
.
Also wie kann ich eine Konstante als double
innerhalb einer Klasse definieren, ohne es global zu machen oder #define
verwenden, die ohne eine Instanz der Klasse funktioniert, und die mit großen C++ 03 Compiler funktioniert ?
'+ 1' für die Erwähnung von' std :: numeric_limits <> ', das halte ich für einen nützlichen Punkt. – Angew