在类结构中,"this"如何工作?

Usi*_*ten 0 c++ struct pointers class this

如上所述,this当在类中定义的结构中调用时,指针如何起作用?假设我有以下代码:

class A {
public:
    struct {
        void bar() {  std::cout << this << std::endl;  }
    } foo;
};

int main() {
    A a; a.foo.bar();
    std::cout << &a << std::endl;
    std::cout << &a.foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这会产生这个输出:

0x62fe9f
0x62fe9f
0x62fe9f
Run Code Online (Sandbox Code Playgroud)

a.foo与之共享同一个地址a,如何才能访问this指针foo

使用this->foo引发错误:

test.cpp:20:23: error: 'struct A::<anonymous>' has no member named 'foo'

Hay*_*ayt 6

如果对象"启动",地址大多只是内存的位置.需要多少补偿成员然后由类定义定义.

所以上课A"开始" 0x62fe9f.

在课程的开头A是成员foo,因为它前面没有任何东西,它也有地址0x62fe9f等.

将类更改为时

class A {
public:
    int i;
    struct {
        void bar() {  std::cout << this << std::endl;  }
    } foo;
};
Run Code Online (Sandbox Code Playgroud)

您shloud看到&a.i&a具有相同的地址和&a.foo&a + sizeof(int)

(注意:它可能比sizeof(int)其他情况也有所不同,因为如何设置填充.这只是一个简单的例子.你不应该在实际代码中依赖它)