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个单词:谢谢。