2011-03-04 12 views
15

Duplicar posibles:
What is the meaning of a const at end of a member function?¿Qué significa "const" (en contexto) al final de una definición de función?

Si mi definición de clase es la siguiente:

type CLASS::FUNCTION(int, const char*) const 

¿Qué quiere decir la última const después del paréntesis de cierre, y cómo hacer yo aplicarlo a la función:

type CLASS::FUNCTION(int var1, const char* var2) { 

} 
+2

Destinado a ser un engaño, pero más fácil de responder que buscarlo. Significa que se puede llamar a la función miembro en un objeto 'const' (o mediante una referencia-o-puntero-a-const), y que la función miembro no puede modificar los miembros de datos (a menos que estén marcados' mutable').En efecto, convierte 'this' en puntero-a-const en la función. Por lo general, dices "FUNCIÓN es una función miembro constante", aunque no recuerdo si esa terminología está en el estándar. –

+0

@Steve: Eso ha sido respondido en un __ [entrada de preguntas frecuentes] (http://stackoverflow.com/questions/4059932/what-is-the-meaning-of-a-const-at-end-of-a-member -función)__. Lo encontré al escribir 'C++ - faq' en la barra de direcciones de mi navegador, lo que me llevó a [http://stackoverflow.com/questions/tagged/c++-faq](http://stackoverflow.com/questions/tagged/ c% 2b% 2b-faq), donde busqué 'const', que me dio la URL. Menos de 30 segundos. – sbi

+0

@sbi: bueno, ciertamente no escribo 120 palabras por minuto, así que ganas. Si hubiera cronometrado el tiempo que tardó en escribir el comentario, sabríamos por cuánto tiempo. Sin embargo, su estrategia no habría funcionado si no hubiera sido una entrada de preguntas frecuentes, entonces, ¿cómo explicar ese riesgo? –

Respuesta

17

Significa que esta función no modifica el estado observable de un objeto.

En términos de compilación, significa que no puede llamar a una función en un objeto const (o referencia de const o const) a menos que esa función también se declare como const. Además, los métodos que están declarados const no pueden llamar a métodos que no lo son.

Actualización: como Aasmund totalmente correcta agrega, se permite const métodos para cambiar el valor de los miembros declarados mutable.

Por ejemplo, podría tener sentido tener una operación de solo lectura (por ejemplo, int CalculateSomeValue() const) que almacena sus resultados en caché porque es costoso llamar. En este caso, debe tener un miembro mutable para escribir los resultados en caché.

Pido disculpas por la omisión, estaba tratando de ser rápido y al grano. :)

+1

+1 para la formulación "no modifica el estado observable". Solo para explicar eso: cualquier miembro marcado como 'mutable' _may_ aún se modificará con las funciones' const'. Por esa razón, 'mutable' solo debe usarse para la contabilidad interna que no será" visible "para el mundo exterior. –

2

Significa que esta función no modificará ninguna variable miembro, ni llamará a ninguna función miembro no const.

Si tiene una referencia/puntero const a una instancia de la clase, solo podrá llamar a las funciones marcadas const de esta manera.

1

Esto significa que el método es const, y significa que el método no modificará ningún miembro, por lo tanto puede usarse en un entorno donde el objeto es const.

class Foo 
{ 
    public: 
     void foo(int a) { m = a; } 
     int bar() const { return m; } 
    private: 
     int m; 
}; 

int baz(const Foo* ptr) 
{ 
    ptr->foo(10); // Not legal, Foo::foo is not const, and ptr is pointer to const. 
    return ptr->bar(); // Legal, Foo::bar is a const method, and does not modify anything. 
} 
2

const al final de la función significa que no se va a modificar el estado del objeto se llama arriba en (es decir, this).

type CLASS::FUNCTION(int, const char*) const ; // Method Signature 

type CLASS::FUNCTION(int var1, const char* var2) const { 

} 

es necesario mencionar la palabra clave const al final de la definición del método también. También tenga en cuenta que solo las funciones miembro pueden tener esta palabra clave no modificadora const al final.

+0

+1 primero para responder a toda la pregunta. – aschepler

Cuestiones relacionadas