2

重複の可能性:
ptr-> hello(); /*対*/(* ptr).hello();

私はC++を学んでいますが、私の質問は、矢印演算子()を使用することと、関数を呼び出すため->のポインターを逆参照することの間に違いがあるかどうかです。*

これらの2つのケースは、私の質問を示しています。

Class* pointer = new Class();
(*pointer).Function();         // case one
pointer->Function();           // case two

違いはなんですか?

4

2 に答える 2

6

演算子*->がオーバーロードされていない場合、両方のバージョンで同じことが達成されます。

于 2012-11-19T13:49:56.350 に答える
3

与えられた

Class* pointer = new Class();

それで

(*pointer).Function();         // case one

ポインタを逆参照Functionし、参照されたオブジェクトのメンバー関数を呼び出します。オーバーロードされた演算子は使用しません。演算子は、生のポインターまたは組み込み型の引数でオーバーロードすることはできません。

pointer->Function();           // case two

これは最初の構文と同じですが、これはrawポインター->であるため、組み込みを使用しますが、この構文は、間接参照の長いチェーンに適しています。pointer

たとえば考えてみてください

(*(*(*p).pSomething).pSomethingElse).foo()

p->pSomething->pSomethingElse->foo()

->表記も一目でわかりやすくなります。

于 2012-11-19T13:59:06.320 に答える