*&var 是多余的吗?
Is *&var redundant?
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
本身相同。
但是,class 类型 可以 将 operator&
重载到 return 它想要的任何地址,并将 operator*
重载到return 它想要的任何参考。这些是 *&var
和 &*var
可能与 var
不同的唯一情况。例如,这在智能指针和迭代器中很常见。
为了解决前一种情况,C++11 引入了 std::addressof()
来获取对象的地址,而不管它是否重载 operator&
,例如:
*&var
-> *std::addressof(var)
&*var
-> std::addressof(*var)
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
本身相同。
但是,class 类型 可以 将 operator&
重载到 return 它想要的任何地址,并将 operator*
重载到return 它想要的任何参考。这些是 *&var
和 &*var
可能与 var
不同的唯一情况。例如,这在智能指针和迭代器中很常见。
为了解决前一种情况,C++11 引入了 std::addressof()
来获取对象的地址,而不管它是否重载 operator&
,例如:
*&var
-> *std::addressof(var)
&*var
-> std::addressof(*var)