重複の可能性:
C ++-(*)の違い。および->?
これの違いは何ですか:
(*ptr).f();
この:
ptr->f();
c ++では、ptrは関数を持つC ++クラスへのポインタf
ですか?
まったく違いはありません。(*ptr).f();
これを行うための醜い方法です。
実際、ptr
がスマートポインタとそのoperator*
でありoperator->
、オーバーロードされていくつかの副作用を実行する場合は、これに問題がある可能性があります。しかし、これは本当に、本当に悪いことです。それは同じくらい邪悪です#define true false
ptr
が通常のポインタの場合、両方とも同等です。は、ポインタを逆参照し(と同等)、逆参照されたオブジェクトのメンバーptr->f
(と同等)にアクセスするためのショートカットです。(*ptr)
.f
がとをptr
オーバーロードするクラスの場合、それぞれが異なる演算子のオーバーロードを呼び出すため、動作が異なる可能性があります。operator->
operator*
文体/タイピングの違いを除けば、違いはありません。構造体またはクラスへのポインタを使用する場合の(*ptr).member = 7;
vsとまったく同じです。ptr->member = 7;