地址

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)

  • 在标准中:`this`是一个右值(而不是类类型),所以它没有地址. (8认同)
  • 终于......理智的声音. (2认同)

Rob*_*obᵩ 8

引用2003 C++标准:

5.1 [expr.prim]关键字this命名一个指向调用非静态成员函数(9.3.2)的对象的指针....表达式的类型是指向函数类(9.3.2)的指针,...表达式是一个右值.

5.3.1 [expr.unary.op]一元运算&符的结果是指向其操作数的指针.操作数应为左值或qualified_id.

简单来说,&需要一个左值.this是一个右值,而不是左值,正如错误信息所示.