C++ 新手,正在尝试了解 *
和 &
的用法。
我想我明白 &*var
如果我想将一个指针的引用变量作为函数参数,或者只是作为一个指针的引用变量,那么它很有用。如果翻转 &
和 *
会怎么样?
*&
在 C++ 中是多余的吗?
这是一些代码:
#include <iostream>
using namespace std;
int main(){
// example 1
int num = 10;
cout << *# // 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;
}
在两个
cout
中使用*&var
是否多余,因为&var
是一个地址而*
出现在&var
之前表示查看地址指向的变量?如果不是冗余,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/