gpt4 book ai didi

c++ - this.attribute 应该是 this->attribute 是什么意思

转载 作者:行者123 更新时间:2023-11-28 01:43:36 32 4
gpt4 key购买 nike

我正在编写一个 C++ 程序,在调试时我在执行以下函数:

int CClass::do_something()
{
... // I've put a breakpoint here
}

我的 CClass 有一个属性,我们称它为 att

当我的程序在我的断点处停止时,我在我的 Watch 窗口中放置了三个东西:

att
this->att
this.att

前两个 attthis->att 包含正确的值,但是 this.att 包含错误的值(至少它看起来不对)。

它显示值的事实意味着 this.att 具有某种意义。那是什么意思?与 this->att 相比,this.att 的含义是什么?

供您引用,我使用 Visual Studio 作为开发环境。

最佳答案

箭头运算符 ->pointer 进行运算在左侧,意味着它访问左侧指针指向的运算符。正如许多其他地方所指出的那样,-> 运算符是手动取消引用指针并使用点表示法的简写。 a->b == (*a).b。这意味着它需要查找的上下文信息,它可以通过指针值找到。点运算符 . 假定您有对左侧对象的引用,因此它不需要先取消引用其左侧的指针。

如果你的调试器以某种方式允许你使用点运算符而不是箭头运算符,可能是因为它没有(或不能)验证所使用的类型,它会假定指针变量的地址,而不是值指向的地址所持有的地址,就是对象。

换句话说,它将在内存中的某个位置查看对象,该位置不是对象本身。该行为很可能是未定义的,您只会看到垃圾数据,即实际存储在成员 att 的内存偏移处的垃圾数据。

假设您的对象的布局使得属性 foo 位于偏移量 0,而属性 att 位于偏移量 4,那么调试器基本上是在查看对象实例的地址加上您的成员变量持有的任何偏移量。我不在家里的电脑旁,但我可以添加一个草图,稍后再澄清。

关于c++ - this.attribute 应该是 this->attribute 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46097935/

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