如前所述,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;
}
生成此输出:
0x62fe9f
0x62fe9f
0x62fe9f
a.foo
与 a
共享同一地址, 如何访问 this
foo
的指针?
使用 this->foo
引发错误:
test.cpp:20:23: error: 'struct A::<anonymous>' has no member named 'foo'
最佳答案
地址主要是对象“开始”时的内存位置。然后由类定义定义需要成员偏移多少。
因此 A
类“开始”于 0x62fe9f
。
A
类的开头是成员 foo
,因为它前面没有任何内容,所以它也有地址 0x62fe9f
等。
当你把类改成
class A {
public:
int i;
struct {
void bar() { std::cout << this << std::endl; }
} foo;
};
你应该看到 &a.i
和 &a
有相同的地址,&a.foo
应该是 &a + sizeof(int )
(注意:它可能大于sizeof(int)
,在其他情况下也不同,因为如何设置填充。这只是一个简单的例子。你不应该在实际代码中依赖它)
关于c++ - 在类结构中, "this"是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40288073/