gpt4 book ai didi

c++ - 是否可以获得 'this'指针的地址?

转载 作者:IT老高 更新时间:2023-10-28 22:17:14 26 4
gpt4 key购买 nike

我读到 this 是一个右值,我们无法通过应用 &this 来获取它的地址。

在我的代码中,我尝试使用对 this 的引用绑定(bind)。我想知道哪种方式会给出 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

最佳答案

I'm wondering which may give the address of this? Or both are wrong?

this 的地址也不是,因为 C++ 抽象机没有为它定义地址。 this 类似于 0。取不到0的地址,不是有存储的实体,只是一些值。那么这有什么作用呢?

int const& i = 0;

它创建一个临时对象,用 0 初始化它,然后将引用绑定(bind)到它。同样的事情发生在您的代码中。您创建对持有 thisvalue 的不同临时对象的引用。

this 是一个关键字,代表正在为其执行成员函数的对象的地址。 C++ 抽象机不需要它占用存储空间,所以它总是(逻辑上)只是一个普通值,比如 0。

不要求 this 占用存储空间是有好处的。它允许在 ABI 上实现 C++,其中 this 在寄存器中传递(通常无法寻址的东西)。如果 &this 必须是明确定义的,即如果 this 必须是可寻址的,那么它将阻止实现使用寄存器来传递地址。 C++ 标准通常旨在不将实现捆绑在一起。

关于c++ - 是否可以获得 'this'指针的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com