2010-11-15 5 views
5

Pido disculpas si esto se ha preguntado antes. Mis resultados de búsqueda no arrojaron una pregunta similar.Método de Const que accede a variables estáticas

Esta es una pregunta conceptual. De acuerdo con MSDN y otros, así:

una función miembro constante no puede modificar ningún miembro de datos o llamar a cualquiera de las funciones miembros que no son constantes

¿Por qué entonces se nos permite acceder a las variables miembro estáticas de un método const?

+0

Si solo está leyendo las variables de miembro, entonces no las está modificando y no viola el requisito de const, ¿verdad? – Jay

+0

@Jay Puedo cambiarlo también, no solo leerlo – Samaursa

Respuesta

9

estándar de C++ dice lo siguiente acerca const funciones miembro:

Si la función miembro se declara const, el tipo de esto es const X*, [...]

En función const miembro, se accede al objeto para el que se llama a la función a través de una ruta de acceso const; por lo tanto, una función de miembro const no modificará el objeto y sus miembros de datos no estáticos.

Así que verá que solo los miembros de datos no estáticos son parte de la 'constness' de la función de miembro.

Sin embargo, creo que es más importante, indica que una buena manera de entender lo que está pasando con const funciones miembro es que hace que la implícita this puntero a un puntero const.

Dado que no es necesario acceder a los miembros estáticos a través del puntero this (implícita o explícitamente), el acceso a ellos no está calificado como const.

+1

Muchas gracias por su respuesta. Después de pensarlo un poco, decidí consultar la respuesta correcta, ya que explica con más detalle sin dejar ninguna duda, especialmente la parte: _ "... una buena forma de entender lo que está pasando ..." _ – Samaursa

13

Porque no son parte del objeto.

+1

¡simple pero también el punto! – thecoshman

Cuestiones relacionadas