2

重複の可能性:
constメソッドからメンバーに対してnonconstメソッドを呼び出す

定数メンバー関数は、C ++のポインターメンバー変数を介して非定数メンバー関数を呼び出すことができますが、期待どおりですか?以下のコードスニペットは正常にコンパイルされています

#include <iostream>

class S {
public:
    void hi() {
        std::cout << "Hi" << std::endl;
    }
};

class T {
public:
    T()
    : s(new S())
    {}

    ~T()
    {
        delete s;
    }

    void hi() const {
        s->hi();
    }

private:
    S  * s;
};

int main(int argc, char ** argv) {
    T t;
    t.hi();
    return 0;
}
4

2 に答える 2

5

動作は正しいです。

これは、ポインタがオブジェクトではなくconst-であるためです。S * s;

たとえば、次のように失敗します。

void hi() const {
    s->hi();     //OK
    s = NULL;    //not OK
}

s(ポインタである)変更することはできません*sが、実際のオブジェクトであるを変更することはできます。

于 2012-06-01T07:50:19.827 に答える