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 claseX
esX*
.
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
.