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 dethisl 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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta