studio programacion para móviles libros libro edición desarrollo curso aplicaciones c++ this-pointer

c++ - programacion - Si `this` no es const, ¿por qué no puedo modificarlo?



manual de programacion android pdf (1)

En El puntero de this [class.this], los estados estándar de C ++:

El tipo de this en una función miembro de una clase X es X* .

es decir, this no es const . Pero ¿por qué es entonces que

struct M { M() { this = new M; } };

da

error: invalid lvalue in assignment <-- gcc ''='' : left operand must be l-value <-- VC++ ''='' : left operand must be l-value <-- clang++ ''='' : left operand must be l-value <-- ICC (source: some online compiler frontends)

En otras palabras, this no es const , pero realmente lo es!


Porque en el mismo párrafo, también se menciona que this es un prvalue ("rvalue puro").

Los ejemplos mencionados en el estándar para rvalue puro son el resultado de llamar a una función que no devuelve una referencia, o literales como 1 , true o 3.5f . this puntero no es una variable, es más como un literal que se expande a la dirección del objeto para el que se llama la función ([class.this]). Y como, por ejemplo, literalmente, tiene tipo bool y no bool const , this es de tipo X* y no X*const .