*&var 是多余的吗?

The*_*r22 2 c++ pointers reference

C++ 新手,尝试了解*和的用法&

我想我明白,&*var如果我想要将指针的引用变量作为函数参数,或者只是作为一般指针的引用变量,那么这是有用的。如果 和&翻转*呢?

*&在C++中是多余的吗?

这是一些代码:

#include <iostream>

using namespace std;

int main(){

    // example 1
    int num = 10;
    cout << *&num; // exact same as num?

    // example 2
    struct person
    {
        string name;
        int age;
    };

    person me[3];

    me[0].name = "my name";
    me[0].age = 321;

    cout << (*&me[0]).name << endl; // exact same as me[0].name?

    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. *&var两者中的使用是否cout多余,因为&var是一个地址,而*前面的&var意味着查看地址指向的变量?

  2. *&var如果不是多余的话,在C++中有什么用呢?

Rem*_*eau 6

大多数情况下,*&var(获取 的地址var,然后取消引用该地址以访问var)和&*var(取消引用var以访问它指向的事物,然后获取该事物的地址)与单独使用相同var

但是,类类型可以重载operator&以返回它想要的任何地址,也可以重载operator*以返回它想要的任何引用。*&var这些是和&*var可能与 不同的唯一情况var。例如,这在智能指针和迭代器中很常见。

为了解决前一种情况,C++11 引入了std::addressof()无论对象是否重载都获取对象的地址operator&,例如:

*&var-> *std::addressof(var)
&*var->std::addressof(*var)

  • @fireshadow52 对于迭代器和智能指针类型,重载一元“operator*”总是发生。它重载了一元“operator&amp;”,这是非常罕见的并且有代码味道。 (2认同)