为什么我在使用 &this 时出现错误?

Why am I getting an error when using &this?

本文关键字:错误 this 为什么      更新时间:2023-10-16

我知道this指针在调用成员函数时会隐式传递给它们。然而,当我试图(通过&this)获取this指针的地址时,我会得到编译器错误"lvalue required"。为什么会这样?

class st
{    
  int a,b;
public :
  void print()
  {      
    cout << &this; //gives lvalue required... why?
    cout << this; //will print address of object.
  }   
}

this不是一个左值,而是一个prvalue。来自【class.this】:

在非静态(9.3)成员函数的主体中,关键字这是一个prvalue表达式,其值是为其调用函数的对象的地址。在类X的成员函数中,它的类型是X*。如果成员函数被声明为const,则this的类型为const X*,如果成员函数声明为volatile,则this类型为volatileX*,并且如果成员函数宣布为const volatile则this类型是const volabileX*。

强调矿

&需要一个lvalue,因此您无法获得this的地址。

因为这个指针是一个右值。这个指针是一个常数值,它像局部变量一样传递给成员函数,所以它的值存储在一个内存位置,当从该函数返回时,该内存位置将变为无效。

假设您正试图打印出对象中的值。cout不知道怎么做,你必须教它。cout<lt*这如果cout知道怎么做的话,可能会这样做,但你可以教它。下面是一个更自然的c++例子。(您还应该考虑构造函数)。

    #include <iostream>
    using namespace std;
    class st
    {
        public:
        int a,b;
    };
    std::ostream& operator<<(std::ostream& s, const st& val)
    {
        return s << "a:" << val.a << " b:" << val.b ;
    }
    int main() {
        st foo;
        foo.a = 1;
        foo.b = 2;
        cout << "foo is " << foo << endl;
    }
相关文章: