我遇到了这个指示
a=&*A;
在一段C ++代码中,其中A是指针。任何人都可以解释它的语义以及它与a=A
的不同之处吗?
答案 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;
的地址&amp; * A =从左到右&#34;地址,A和#34;的值。