c++ - *&var 是多余的吗?

标签 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;
}
  1. 在两个cout中使用*&var是否多余,因为&var是一个地址而 * 出现在&var 之前表示查看地址指向的变量?

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

最佳答案

大多数情况下,*&var(获取var的地址,然后取消引用该地址以访问var) 和 &*var(取消引用 var 以访问它指向的内容,然后获取该内容的地址)与仅使用 var 本身。

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

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

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

关于c++ - *&var 是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72371541/

相关文章:

c++ - 在x86/x86-64上智能指针的原子交换

c++ - 返回一个即将在函数中销毁的变量

c++ - 运算符重载问题

c++ - 指针安全对象?

c - int*a 和 char *a 的区别?

C++:误解内存地址和指针的复制值

c++ - 析构函数很懒惰,为什么?

c++ - 尽管有 pop(),如何避免删除 priority_queue::top()?

c# - ConfigurationManager 的命名空间在哪里?

algorithm - Cauchy Reed-Solomon 算法如何工作?