In PHP und C # können die Konstanten so initialisiert werden, wie sie deklariert sind:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
Ich habe die folgende C ++ - Deklaration eines Funktors, der mit einer anderen Klasse verwendet wird, um zwei mathematische Vektoren zu vergleichen:
struct equal_vec
{
bool operator() (const Vector3D& a, const Vector3D& b) const
{
Vector3D dist = b - a;
return ( dist.length2() <= tolerance );
}
static const float tolerance = 0.001;
};
Dieser Code wurde ohne Probleme mit g ++ kompiliert. Im C ++ 0x-Modus (-std = c ++ 0x) gibt der g ++ - Compiler eine Fehlermeldung aus:
Fehler: 'constexpr' wird für die klasseninterne Initialisierung der 'Toleranz' des statischen Datenelements vom nicht integralen Typ benötigt
Ich weiß, dass ich dieses static const
Mitglied außerhalb der Klassendefinition definieren und initialisieren kann . Außerdem kann ein nicht statisches konstantes Datenelement in der Initialisierungsliste eines Konstruktors initialisiert werden.
Aber gibt es eine Möglichkeit, eine Konstante innerhalb der Klassendeklaration so zu initialisieren, wie es in PHP oder C # möglich ist?
Aktualisieren
Ich habe das static
Schlüsselwort verwendet, nur weil es möglich war, solche Konstanten innerhalb der Klassendeklaration in g ++ zu initialisieren. Ich brauche nur eine Möglichkeit, eine Konstante in einer Klassendeklaration zu initialisieren, egal ob sie als deklariert ist static
oder nicht.
I used static keyword just because it was possible to initialize such constants within the class declaration in g++. I just need a way to initialize a constant in a class declaration no matter if it declared as static or not.
Das ist der falsche Weg, um zu entscheiden, ob ein Mitglied sein sollstatic
oder nicht. Lassen Sie niemals die lexikalische Faulheit über die Semantik Ihres Codes entscheiden.