我读到了this
是一个右值,我们无法通过应用来获取它的地址&this
.
在我的代码中,我尝试使用引用绑定this
。我想知道哪种方式可以给出地址this
?还是两者都错了?
到底是什么this
?左值、右值、关键字还是其他什么?
void MyString::test_this() const{
std::cout << "this: " << this << std::endl;
const MyString * const& this_ref = this;
std::cout << "thie_ref: " << &this_ref << std::endl;
const MyString * const&& this_right = this;
std::cout << "thie_right: " << &this_right << std::endl;
}
//this: 00CFFC14
//thie_ref: 00CFFB14
//thie_right: 00CFFAFC
我想知道哪一个可以给出地址this
?还是两者都错了?
地址也不是this
,因为 C++ 抽象机没有为其定义地址。this
就好像0
。你无法获取0的地址,它不是一个有存储的实体,只是一些值。那么这有什么作用呢?
int const& i = 0;
它创建一个临时对象,用 0 对其进行初始化,然后将引用绑定到它。您的代码中也会发生同样的事情。您创建对持有不同临时对象的引用value of this
.
this
是一个关键字,代表正在执行成员函数的对象的地址。 C++ 抽象机不要求它占用存储空间,因此它始终(逻辑上)只是一个普通值,例如 0。
不要求是有好处的this
来占用存储空间。它允许通过 ABI 实现 C++,其中this
在寄存器中传递(通常无法寻址的东西)。如果&this
必须明确定义,即如果this
必须是可寻址的,否则它将阻止实现使用寄存器来传递地址。 C++ 标准的总体目标是不将实现捆绑在一起。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)