2011-12-28 10 views
9
class TConst 
{ 
    const int i; 
    int& ref; 
    public: 
    TConst(int n):i(n),ref(n){} 
    static void p1(){prn(i);}//error here 
}; 

Mi compilador genera un error cuando trato de utilizar un miembro de clase const en una función de miembro static.¿Por qué no podemos usar miembros de const en funciones miembro estáticas?

¿Por qué no está permitido?

+1

Por favor, siempre publique el error completo que obtiene. – orlp

+1

const int sigue vinculado a un objeto, no a la clase. – nullpotent

+1

En un método estático no existe una instancia de clase, por lo que no hay miembros de clase ... FYI puede hacer esto 'static const int i = 42;' si desea usarlo de esta manera. – AJG85

Respuesta

6

El miembro const se inicializa durante la construcción del objeto. Los miembros static no dependen de la creación del objeto y no tienen acceso al puntero this, por lo tanto, no saben dónde reside la variable miembro const.

7

que no funcionaría incluso si no era const:

error: a nonstatic member reference must be relative to a specific object 

funciones estáticas no pueden acceder a las variables miembro no estáticas. Esto se debe a que las variables miembro no estáticas deben pertenecer a un objeto de clase, y las funciones miembro estáticas no tienen ningún objeto de clase con el que trabajar.

13

const significa cosas diferentes. En este caso, significa que i es inmutable después de haber sido inicializado. Es no significa que es una constante literal (como creo que crees que significa). i puede ser diferente para diferentes instancias de TConst, por lo que es lógico que los métodos static no puedan usarlo.

+0

Siempre es tan simple) Gracias – Alexander

Cuestiones relacionadas