W PHP i C # stałe można zainicjować tak, jak są zadeklarowane:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
Mam następującą deklarację C ++ funktora, który jest używany z inną klasą do porównania dwóch wektorów matematycznych:
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;
};
Ten kod skompilowany bez problemów z g ++. Teraz w trybie C ++ 0x (-std = c ++ 0x) kompilator g ++ wyświetla komunikat o błędzie:
błąd: „constexpr” jest potrzebne do inicjalizacji w klasie statycznego elementu członkowskiego danych „tolerancja” typu niecałkowitego
Wiem, że mogę zdefiniować i zainicjować tego static const
członka poza definicją klasy. Ponadto niestatyczny stały element członkowski danych można zainicjować na liście inicjatorów konstruktora.
Ale czy istnieje sposób na zainicjowanie stałej w deklaracji klasy, tak jak jest to możliwe w PHP lub C #?
Aktualizacja
Użyłem static
słowa kluczowego tylko dlatego, że można było zainicjować takie stałe w deklaracji klasy w g ++. Potrzebuję tylko sposobu na zainicjowanie stałej w deklaracji klasy, bez względu na to, czy została zadeklarowana jako, static
czy nie.
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.
To zły sposób decydowania, czy członek powinien być,static
czy nie. Nigdy nie pozwól, aby leksykalne lenistwo decydowało o semantyce twojego kodu.