The*_*r22 2 c++ pointers reference
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;
}
Run Code Online (Sandbox Code Playgroud)
*&var两者中的使用是否cout多余,因为&var是一个地址,而*前面的&var意味着查看地址指向的变量?
*&var如果不是多余的话,在C++中有什么用呢?
在大多数情况下,*&var(获取 的地址var,然后取消引用该地址以访问var)和&*var(取消引用var以访问它指向的事物,然后获取该事物的地址)与单独使用相同var。
但是,类类型可以重载operator&以返回它想要的任何地址,也可以重载operator*以返回它想要的任何引用。*&var这些是和&*var可能与 不同的唯一情况var。例如,这在智能指针和迭代器中很常见。
为了解决前一种情况,C++11 引入了std::addressof()无论对象是否重载都获取对象的地址operator&,例如:
*&var-> *std::addressof(var)
&*var->std::addressof(*var)