【问题标题】:What does a=&*A mean in C++ (in which A is a pointer)? [duplicate]a=&*A 在 C++ 中是什么意思(其中 A 是一个指针)? [复制]
【发布时间】:2016-12-14 05:17:09
【问题描述】:

我遇到了这个指令

a=&*A;

在一段 C++ 代码中,其中 A 是一个指针。谁能解释它的语义以及它与a=A 有何不同?

【问题讨论】:

  • C 还是 C++?这里非常重要的区别! (除非这里的所有内容都是内置类型。如果是这种情况,请说明。)
  • 请记住,C++ 有运算符重载,因此如果不知道 A 是什么以及为它重载了哪些运算符,就无法回答。
  • 意思是“愚蠢的把戏”。
  • 关注@JoachimPileborg - 是迭代器吗?

标签: c++ pointers


【解决方案1】:

如果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...
}

【讨论】:

  • 例子超过10000字:)谢谢。
【解决方案2】:

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

如果A 是一个具有类指针语义的类,并且您想获取 原始指针 来为其指向的值,那么您必须应用 operator*(访问值),然后应用 operator& (检索地址)。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这是我在大学学到的解释。 & = "地址"

      • =“价值”

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

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 2021-03-31
        • 1970-01-01
        • 2020-02-15
        • 1970-01-01
        • 2014-12-21
        • 1970-01-01
        • 2011-04-16
        相关资源
        最近更新 更多