address of this

故事扮演 提交于 2019-11-30 08:54:20

this is a pointer containing the address to the "current object". It is not a variable that is stored somewhere (or could even be changed), it is a special keyword with these properties.

As such, taking its address makes no sense. If you want to know the address of the "current object" you can simply output:

std::cout << this;

or store as

void* a = this;

Quoting the 2003 C++ standard:

5.1 [expr.prim] The keyword this names a pointer to the object for which a nonstatic member function (9.3.2) is invoked. ... The type of the expression is a pointer to the function’s class (9.3.2), ... The expression is an rvalue.

5.3.1 [expr.unary.op] The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue or a qualified_id.

To put it simply, & requires an lvalue. this is an rvalue, not an lvalue, just as the error message indicates.

this refers to the current object by using it's address.

In your problem, there are two errors:

  • this is not an lvalue.

    The & requires an lvalue. lvalues are those that can appear on on the left-hand side of an assignment (variables, arrays, etc.).

    Whereas this is a rvalue. rvalues can not appear on the left-hand side (addition, subtraction, etc.).

    Reference: C++ Rvalue References Explained.

  • A hidden error which I'd like to also mention is thus:

    address_of_this is actually receiving an address of an address.

    Basically, &this is translated into something like &&object or &(&object).

Basically, think of this as &object (but only to remember because it is not that true).

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!