私はC++を学んでいますが、私の質問は、矢印演算子()を使用することと、関数を呼び出すため->
のポインターを逆参照することの間に違いがあるかどうかです。*
これらの2つのケースは、私の質問を示しています。
Class* pointer = new Class();
(*pointer).Function(); // case one
pointer->Function(); // case two
違いはなんですか?
私はC++を学んでいますが、私の質問は、矢印演算子()を使用することと、関数を呼び出すため->
のポインターを逆参照することの間に違いがあるかどうかです。*
これらの2つのケースは、私の質問を示しています。
Class* pointer = new Class();
(*pointer).Function(); // case one
pointer->Function(); // case two
違いはなんですか?
演算子*
と->
がオーバーロードされていない場合、両方のバージョンで同じことが達成されます。
与えられた
Class* pointer = new Class();
それで
(*pointer).Function(); // case one
ポインタを逆参照Function
し、参照されたオブジェクトのメンバー関数を呼び出します。オーバーロードされた演算子は使用しません。演算子は、生のポインターまたは組み込み型の引数でオーバーロードすることはできません。
pointer->Function(); // case two
これは最初の構文と同じですが、これはrawポインター->
であるため、組み込みを使用しますが、この構文は、間接参照の長いチェーンに適しています。pointer
たとえば考えてみてください
(*(*(*p).pSomething).pSomethingElse).foo()
対
p->pSomething->pSomethingElse->foo()
->
表記も一目でわかりやすくなります。