comportamiento de const_cast
Estaba leyendo sobre el operador const_cast en c ++
1.Primera cosa rara que no puedo entender es
intaxis del operador @const_cast, es decir,
-const_cast-- <--Type--> - (- expression -) --------------------> <
o que tengo entendido acerca de esta sintaxis es que ayuda a desechar la constidad de unaexpression
de tipoType
. Pero considere este código
class ConstTest {
private:
int year;
public:
ConstTest() : year(2007) {}
void printYear() const;
};
int main() {
ConstTest c;
c.printYear();
return 0;
}
void ConstTest::printYear() const {
ConstTest *c = const_cast<ConstTest*>(this);
c->year = 42;
std::cout << "This is the year " << year << std::endl;
}
Aquí en la líneaConstTest *c = const_cast<ConstTest*>(this)
, Creo que la constante dethis
l puntero @ debe desecharse, pero el resultado muestra que es el objeto el quethis
se refiere a que pierde su consistencia.
Siento que el código debería haber sidoConstTest *c = const_cast<ConstTest>(*this)
, pero esto produce un error. Sé que estoy equivocado en muchas interpretaciones. Por favor corríjalos todos.
2.mi segundo problema es la declaración dada a continuación
El resultado de una expresión const_cast es un valor r a menos que Tipo sea un tipo de referencia. En este caso, el resultado es un valor l.
¿Por qué es así y por qué no es cierto en caso de punteros?