2

重複の可能性:
C ++-(*)の違い。および->?

これの違いは何ですか:

(*ptr).f();

この:

ptr->f();

、ptrは関数を持つC ++クラスへのポインタfですか?

4

3 に答える 3

8

まったく違いはありません。(*ptr).f();これを行うための醜い方法です。

実際、ptrがスマートポインタとそのoperator*でありoperator->、オーバーロードされていくつかの副作用を実行する場合は、これに問題がある可能性があります。しかし、これは本当に、本当に悪いことです。それは同じくらい邪悪です#define true false

于 2013-02-01T13:47:09.700 に答える
8

ptrが通常のポインタの場合、両方とも同等です。は、ポインタを逆参照し(と同等)、逆参照されたオブジェクトのメンバーptr->f(と同等)にアクセスするためのショートカットです。(*ptr).f

がとをptrオーバーロードするクラスの場合、それぞれが異なる演算子のオーバーロードを呼び出すため、動作が異なる可能性があります。operator->operator*

于 2013-02-01T13:50:02.890 に答える
0

文体/タイピングの違いを除けば、違いはありません。構造体またはクラスへのポインタを使用する場合の(*ptr).member = 7;vsとまったく同じです。ptr->member = 7;

于 2013-02-01T13:48:41.330 に答える