En PHP y C #, las constantes se pueden inicializar a medida que se declaran:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
Tengo la siguiente declaración de C ++ de un functor que se usa con otra clase para comparar dos vectores matemáticos:
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;
};
Este código compilado sin problemas con g ++. Ahora, en modo C ++ 0x (-std = c ++ 0x), el compilador g ++ genera un mensaje de error:
error: 'constexpr' necesario para la inicialización en clase del miembro de datos estáticos 'tolerancia' de tipo no integral
Sé que puedo definir e inicializar este static const
miembro fuera de la definición de clase. Además, un miembro de datos constantes no estáticos se puede inicializar en la lista de inicializadores de un constructor.
¿Pero hay alguna forma de inicializar una constante dentro de la declaración de clase como es posible en PHP o C #?
Actualizar
Usé la static
palabra clave solo porque era posible inicializar tales constantes dentro de la declaración de clase en g ++. Solo necesito una forma de inicializar una constante en una declaración de clase, sin importar si se declaró como static
o no.
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.
Esa es la forma incorrecta de decidir si un miembro debería serlostatic
o no. Nunca dejes que la pereza léxica decida la semántica de tu código.