variable usar objetos funcion estatica ejemplos cuando c++ static language-lawyer const-method

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.