2016-09-04 5 views
1

が、それはC++ constメンバ関数(初級)C++プライマーP259で

constのあるオブジェクト、およびconstのオブジェクトへの参照やポインタを言いますが、 はconstメンバ関数を呼び出すことができます。

しかし、constオブジェクトへのポインタは、ポインタ自体が非コンスタントであるため、必ずしも当てはまりません。メンバ関数が指されているオブジェクトを変更しない限り、constオブジェクトへのポインタに対して非コンスメンバ関数を呼び出すことは正当です。
正しいですか?

編集:OK私は「ポインタ上のメンバ関数」を呼び出すと、実際には逆参照しているので、下にあるオブジェクトを使用しています。

+1

いいえ、そうではありません。見積もりは正しいです。私は、あなたがポインターの恒久性が何らかの意味を持つと信じる理由を知らない。 – IInspectable

+0

'メンバ関数は、指し示されているオブジェクトを変更しません。':あなたは 'const'関数のようなものか、何かを修正することを避けている' const'以外の関数を意味しますか? – AndyG

+1

"ポインタ自体が非コンマであるため"つまり、ポインタを変更できることを意味します。それが指摘するものではありません。 – juanchopanza

答えて

3

見積もりは正しいです。

この

class TestClass 
{ 
public: 
    void nonconst(){}; 

    void constMethod() const {} 
}; 

int main() 
{ 

    TestClass const *s = new TestClass(); 
    //s->nonconst(); // (1) no not legal 
    s->constMethod(); 

    s = new TestClass(); // (2) yes legal 
    s->constMethod(); 
} 
  1. Sを試してみては定数へのポインタです。 Sは、を指すことができしかし
  2. 非constの方法は

'この' 引数廃棄修飾子として 'CONST TestClassを' を通過[-fpermissive]

を引き起こす呼び出し 別のインスタンス。コメントで述べたように、ポインタは別の変数を指すことができます。
関連する問題