c++ - usar - variable static c#
C++-Por qué la función miembro estática no se puede crear con el calificador ''const'' (4)
Cuando aplica el calificador const
a una función de miembro no estático, afecta this
puntero. Para una función de miembro constificada de clase C
, this
puntero es de tipo C const*
, mientras que para una función de miembro que no está const-calificada, this
puntero es de tipo C*
.
Una función miembro estática no tiene this
puntero (tal función no se invoca en una instancia particular de una clase), por lo que la calificación const de una función miembro estática no tiene ningún sentido.
Hoy tengo un problema. Estoy en la necesidad de una función miembro static
, const
no es obligatorio, pero es mejor. Pero, no tuve éxito en mis esfuerzos. ¿Alguien puede decir por qué o cómo?
Es desafortunado que C ++ no lo acepte según el diseño, pero lógicamente hay pocos casos de uso en los que se valida bien.
Una función que es válida a nivel de clase (estática) puede no cambiar ningún dato estático, puede ser que solo los datos de consulta sean const. Puede ser, debería ser como
if(Object)
MakeThisConstant()
else
MakeStaticDataConstant() // Only in the scope but static data cannot be constant so may be it should in some scenarios
Estoy de acuerdo con su pregunta, pero lamentablemente el C ++ está diseñado de esa manera. Por ejemplo:
class A {
int i; //<--- accessed with ''this''
static int s; //<---- accessed without ''this''
public:
static void foo () const // <-- imaginary const
{}
};
A partir de hoy, la const
se considera en contexto de this
. En cierto modo, es angosto. Se puede hacer más amplio aplicando este const
más allá de this
puntero.
es decir, la const
"propuesta", que también puede aplicarse a funciones static
, restringirá los miembros static
de cualquier modificación.
En el código de ejemplo, si foo()
se puede const
, entonces en esa función, A::s
no se puede modificar. No puedo ver ningún efecto secundario del idioma, si esta regla se agrega al estándar. Por el contrario, es divertido que por qué tal regla no existe.
Sin entrar en los detalles, es porque puede haber o no un objeto modificado por la función, por lo que const es ambiguo para el compilador.
Recuerde que const
mantiene los objetos constantes, pero puede haber o no un objeto aquí para mantenerse constante.