a =& * A在C ++中是什么意思(其中A是指针)?

时间:2016-08-08 12:19:22

标签: c++ pointers

我遇到了这个指示

a=&*A;

在一段C ++代码中,其中A是指针。任何人都可以解释它的语义以及它与a=A的不同之处吗?

4 个答案:

答案 0 :(得分: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...
}

答案 1 :(得分:3)

运算符*可以重载,通常会为迭代器和智能指针重载。

如果A是一个具有指针式语义的类,并且你想让原始指针指向它所指向的值,那么你必须应用operator *(来访问值)和然后运营商&amp; (检索地址)。

当您看到类似的构造时,这很可能是用例。如果不知道A和相关类是什么,就不可能知道更多:*可以重载以做其他事情和&amp;也可能超载。

答案 2 :(得分:2)

假设A是一种对象,那么*可能是一个运算符。

如果A是迭代器,那么a可以是迭代器指向的当前元素的地址。

答案 3 :(得分:-1)

这是我在大学里学到的解释。  &安培; =&#34;&#34;

的地址
  • =&#34;&#34;
  • 的值

&amp; * A =从左到右&#34;地址,A和#34;的值。