behaviour de const_cast
Eu estava lendo sobre o operador const_cast em c ++
1.Primeira coisa estranha que eu não consigo entender é
intaxe do operador @const_cast, ou seja,
-const_cast-- <--Type--> - (- expression -) --------------------> <
O que eu entendi sobre essa sintaxe é que ela ajuda a eliminar a constância de umexpression
do tipoType
.Mas 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;
}
Aqui está na linhaConstTest *c = const_cast<ConstTest*>(this)
, Acho que a const dethis
ponteiro deve ser descartado, mas a saída mostra que é o objeto quethis
refere-se a que perde sua consistência.
Sinto que o código deveria ter sidoConstTest *c = const_cast<ConstTest>(*this)
, mas isso produz um erro. Eu sei que estou errado em muitas interpretações. Corrija todos eles.
2. meu segundo problema é a declaração abaixo
O resultado de uma expressão const_cast é um rvalue, a menos que Type seja um tipo de referência. Nesse caso, o resultado é um valor l.
Por que é isso e por que não é verdade no caso de ponteiro