0

私はコードベースに取り組んでいて、ちょっと困惑したり、少なくとも少し考え直したりする何かに出くわしました。

次のように、参照によって渡される関数へのパラメーターがあります。

const PathTile &refTile

関数のある時点でpathTile、演算子を使用して、予想されるようにのメンバー関数にアクセスします。演算子->を使用して、同じメンバー関数に数行下でアクセスします.。奇妙なことは、コードが機能することです。が使用されている場合、これは->暗黙的.ですか??

前の人が意図的にやったのかどうかわからないので質問します。変更する必要がありますか?

4

4 に答える 4

4

関数のある時点で、-> 演算子を使用して、期待どおりに pathTile のメンバー関数にアクセスします。

これは正しくありません。参照のメンバーは、通常、 経由でアクセスする必要があります.。Seth がコメントで指摘したように、->オーバーロードされる可能性があります...これは、型がポインターであるふりをしたい場合に役立ちます。.オーバーロードできません。

これは -> の場合は暗黙的です。使用されている??

いいえ、別の説明があるはずです。(別の変数とオーバーロード->がすぐに思い浮かびます)

于 2013-02-26T20:14:09.487 に答える
2

通常のポインターとほぼ同じように使用できる、スマート ポインターと呼ばれる特別なオブジェクトがあります。それらが operator -> をオーバーロードすることを提供しますが、それらは実際のオブジェクトであるため、 を通じて独自のメソッドを呼び出すことができます。それで:

struct Foobar { void method(); };
smart_pointer<Foobar> spointer;
spointer->method(); // called method() of class Foobar of instance where spointer points to
spointer.reset();   // called reset() of object spointer itself.

参照を使用しても違いはありません。したがって、上記の例の spointer が smart_pointer 型への参照である場合、同じになります。

于 2013-02-26T20:23:17.317 に答える
1

次のことができるという事実に関係している可能性があります。

foo *x=new foo();
foo &y=*x;

今:

x->bar();

と:

y.bar();

同等であり、合法であり、有効であり、コンパイルされ、同じことを行います。

もっとコードをください

于 2013-02-26T20:19:41.513 に答える
0

いいえ、参照であるため、アクセスは同じ/交換可能ではありません。

一般的なケースの 1 つは、参照されるオブジェクトがコンテナー オブジェクト (つまり、スマート ポインター) である場合です。obj.memberはコンテナー メンバーobj->memberにアクセスできますが、 は の表記上の便宜を介して、含まれているオブジェクトのメンバーにアクセスするように指定できますoperator->()

をチェックPathTileoperator->()ます。

于 2013-02-26T20:19:54.533 に答える