Je lisais à propos de l'opérateur const_cast en C++de const_cast
1.Premièrement chose bizarre chose que je ne comprends pas est
const_cast syntaxe de l'opérateur à savoir
-const_cast-- < --Type -> - (- expression -) --------------------> <
ce que j'ai comprendre au sujet de cette syntaxe est qu'il permet de jeter constness d'un écart expression
de type Type
considérer ce code .Mais
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;
}
Ici, en ligne ConstTest *c = const_cast<ConstTest*>(this)
, je pense que le const de this
pointeur doit être rejeté, mais la sortie montre que c'est l'objet que this
fait référence à qui perd sa constance.
Je pense que le code aurait dû être ConstTest *c = const_cast<ConstTest>(*this)
, mais cela génère une erreur. Je sais que je me trompe à de nombreuses interprétations. Veuillez les corriger tous s'il vous plaît.
deuxième problème 2.my est la déclaration ci-dessous
Le résultat d'une expression const_cast est un rvalue sauf si le type est un type de référence. Dans ce cas, le résultat est une lvalue.
Pourquoi est-ce le cas et pourquoi cela n'est pas vrai dans le cas des pointeurs?
Il est préférable d'éviter const_cast jusqu'à ce que vous compreniez mieux la langue. C'est très dangereux. –