Pourquoi le qualificatif Const ne travaille-t-il pas sur les membres du pointeur sur les objets const?
-
29-10-2019 - |
Question
Je sais que cela a été beaucoup demandé, mais les seules réponses que j'ai pu trouver étaient lorsque la constant a été réellement jetée en utilisant (int *) ou similaire. Pourquoi le qualificatif Const ne fonctionne-t-il pas sur les variables des membres de type pointeur sur les objets const alors qu'aucun casting n'est impliqué?
#include <iostream>
class bar {
public:
void doit() { std::cout << " bar::doit() non-const\n"; }
void doit() const { std::cout << " bar::doit() const\n"; }
};
class foo {
bar* mybar1;
bar mybar2;
public:
foo() : mybar1(new bar) {}
void doit() const {
std::cout << "foo::doit() const\n";
std::cout << " calling mybar1->doit()\n";
mybar1->doit(); // This calls bar::doit() instead of bar::doit() const
std::cout << " calling mybar2.doit()\n";
mybar2.doit(); // This calls bar::doit() const correctly
}
// ... (proper copying elided for brevity)
};
int main(void)
{
const foo foobar; // NOTE: foobar is const
foobar.doit();
}
Le code ci-dessus donne la sortie suivante (testée dans GCC 4.5.2 et VC100):
foo::doit() const calling mybar1->doit() bar::doit() non-const <-- Why ? calling mybar2.doit() bar::doit() const
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow