C++ a=&*C+中的平均值+;(其中A是指针)?

C++ a=&*C+中的平均值+;(其中A是指针)?,c++,pointers,C++,Pointers,我遇到了这个指令 a=&*A; 在一段C++代码中,A是指针。有人能解释它的语义吗?它与a=a有什么不同?假设a是一种对象,那么可能*是一个操作符 如果A是迭代器,那么A可以是迭代器指向的当前元素的地址。运算符*可以重载,通常对迭代器和智能指针重载 如果A是一个具有指针式语义的类,并且您希望获得指向它所指向的值的原始指针,那么您必须应用运算符*(访问值),然后应用运算符&(检索地址) 当您看到这样的构造时,这是最有可能的用例。如果不知道A和相关类是什么,就不可能知道更多:*可以重载来做

我遇到了这个指令

a=&*A;

在一段C++代码中,A是指针。有人能解释它的语义吗?它与

a=a
有什么不同?

假设
a
是一种对象,那么可能
*
是一个操作符


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

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

如果
A
是一个具有指针式语义的类,并且您希望获得指向它所指向的值的原始指针,那么您必须应用运算符*(访问值),然后应用运算符&(检索地址)


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

如果
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...
}
structfoo
{
//一些数据。。。
};
std::向量向量_of_foo;
//填充_foo的向量_的代码
for(auto A=vector_of_foo.begin();A!=vector_of_foo.end();++A)
{
Foo*a=&*a;
//做一些需要指向Foo的指针的事情。。。
}

这是我在大学里学到的解释。
&=“地址”

  • =“值在”

&*A=从左到右“地址,A处的值”

C还是C++?这里有非常重要的区别!(除非这里的所有东西都是内置类型。如果是这样的话,请记住它)。C++有操作符重载,所以不知道什么是“代码> > <代码> >什么操作符被重载,这是不可能的。它意味着“愚蠢的技巧”。跟着@ JoaPixiRikg——是一个迭代器。这个例子超过10000个单词:谢谢。