T.J*_*.J. 11 c++ pointers this
我试图找到this指针的地址,但这段代码显示一个奇怪的错误:
#include <iostream>
using namespace std;
class Base
{
public:
void test()
{
void *address_of_this =&this;
cout<<address_of_this<<endl;
}
};
int main()
{ Base k;
k.test();
return 0;
} //error non-lvalue in unary'&'
Run Code Online (Sandbox Code Playgroud)
你能解释一下这个错误吗?
还指出什么是非法的地址this?
Pla*_*aHH 34
this是一个包含"当前对象"地址的指针.它不是存储在某处(或甚至可以更改)的变量,它是具有这些属性的特殊关键字.
因此,取其地址毫无意义.如果你想知道"当前对象"的地址,你可以简单地输出:
std::cout << this;
Run Code Online (Sandbox Code Playgroud)
或者存储为
void* a = this;
Run Code Online (Sandbox Code Playgroud)
引用2003 C++标准:
5.1 [expr.prim]关键字
this命名一个指向调用非静态成员函数(9.3.2)的对象的指针....表达式的类型是指向函数类(9.3.2)的指针,...表达式是一个右值.5.3.1 [expr.unary.op]一元运算
&符的结果是指向其操作数的指针.操作数应为左值或qualified_id.
简单来说,&需要一个左值.this是一个右值,而不是左值,正如错误信息所示.