124

アロー演算子 ( ->) は何の同義語ですか?

4

7 に答える 7

164

次の 2 つの式は同等です。

a->b

(*a).b

(Konradが言及しているように、オペレーターのオーバーロードの影響を受けますが、それは異常です)。

于 2008-10-21T10:02:47.653 に答える
72

a->bは一般に の同義語です(*a).b。ここでの括弧は、演算子のバインディングの強さのために必要であり、*:.は バインドがより強く、最初に実行される*a.bため機能しません。.したがって、これは と同等*(a.b)です。

->ただし、オーバーロードには注意してください。とはどちら*もオーバーロードされる可能性があるため、意味が大幅に異なる可能性があります。

于 2008-10-21T10:03:38.353 に答える
47

C++ 言語では、アロー演算子 ( ->) をポインターを逆参照するための同義語として定義し、.そのアドレスで -operator を使用します。

例えば:

オブジェクトanObjectとポインタ がある場合aPointer:

SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;

オブジェクト メソッドの 1 つを使用できるようにするには、ポインターを逆参照し、そのアドレスでメソッド呼び出しを行います。

(*aPointer).method();

アロー演算子を使用して次のように記述できます。

aPointer->method();

アロー演算子が存在する主な理由は、非常に一般的なタスクの入力を短縮することと、ポインターの逆参照を囲む括弧を忘れやすいことです。括弧を忘れた場合、.-operator は *-operator よりも強くバインドされ、例を次のように実行します。

*(aPointer.method()); // Not our intention!

他の回答のいくつかは、C++ 演算子がオーバーロードされる可能性があることと、それほど一般的ではないことの両方についても言及しています。

于 2008-10-21T10:09:52.803 に答える
18

C++0x では、演算子は 2 つ目の意味を持ち、関数またはラムダ式の戻り値の型を示します。

auto f() -> int; // "->" means "returns ..."
于 2010-11-06T15:06:11.263 に答える
13

私はほとんど右から左に読んで、「in」と呼んでいます

foo->bar->baz = qux->croak

になります:

「foo の bar の baz は qux の croak になります。」

于 2008-10-21T10:05:37.943 に答える