2016-08-08 5 views
0

私はこの命令AがポインタであるC++コードの断片でa =&* C++(Aはポインタ)の意味は何ですか?

a=&*A; 

出くわします。誰でもそのセマンティクスを説明することができ、どのようにそれがa=Aと異なるのですか?

+7

CまたはC++?ここで非常に重要な違い! –

+5

Aとは何か... ... –

+1

C++には演算子がオーバーロードされているので、 'A 'が何​​であるか知らずに答えることは不可能であることを覚えておいてください。どのオペレータがそれに対して過負荷になっているか。 –

答えて

9

Aがイテレータの場合、*Aは、イテレータが "指している"値を提供します。次に、その値にアドレスを得るために、&演算子がその値に適用されます。 &オペレータが過負荷になっていない限り。

シンプルでやや愚か例:

struct Foo 
{ 
    // Some data... 
}; 

std::vector<Foo> vector_of_foo; 

// Code to populate vector_of_foo 

for (auto A = vector_of_foo.begin(); A != vector_of_foo.end(); ++A) 
{ 
    Foo* a = &*A; 
    // Do something that requires a pointer to Foo... 
} 
+0

例は10000以上の単語です:)ありがとう。 – zell

2

Aがオブジェクトの種類であると仮定すると、おそらく*が演算子です。

Aがイテレータである場合、aはイテレータがポイントする現在の要素のアドレスになります。

3

Operator *はオーバーロードすることができます。通常、イテレータとスマートポインタにはオーバーロードされます。

Aはポインタのようなセマンティクスを持つクラスであり、あなたはそれが指すvalueに生のポインタを取得したい場合は、あなたが(アクセス値に)演算子*を適用する必要があり、その後、オペレータ&(アドレスを取得します) 。

これは、そういうような構造が見えるときには、おそらくそうです。 Aとそれに関連するクラスが何であるかを知らなくても、もっと知ることは不可能です。*何かをするためにオーバーロードすることができ、&もオーバーロードすることができます。

-1

ここで私は私の大学で学んだ説明があります。

& * A =左から右へ、 "Aの値のアドレス" から "の値"

  • = & = "のアドレス"。

関連する問題