const予選者がconstオブジェクトのポインターメンバーで作業していないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/5917678

質問

私はこれがたくさん尋ねられていることを知っていますが、私が見つけることができる唯一の答えは、憲法が実際に(int*)または類似して使用されているときに実際に追い出されたときでした。キャストが関与していないのに、constオブジェクトのポインタータイプメンバー変数で作業していないのはなぜですか?

#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();
}

上記のコードは、次の出力を生成します(GCC 4.5.2およびVC100でテストされています):

foo::doit() const
  calling mybar1->doit()
    bar::doit() non-const         <-- Why ?
  calling mybar2.doit()
    bar::doit() const

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top