c++ - 在类结构中, "this"是如何工作的?

标签 c++ class pointers struct 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;
}

生成此输出:

0x62fe9f
0x62fe9f
0x62fe9f

a.fooa 共享同一地址, 如何访问 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/

相关文章:

c++ - 链接不支持异常处理的代码 (C++/LLVM)

c++ 继承类中函数重载的问题

c - 如何知道我的代码中存在段错误?

c - 实现广度优先搜索时的错误 (C)

pointers - Rust Global.dealloc vs ptr::drop_in_place vs ManuallyDrop

c++ - 在 Linux 上测试网络代码的最准确方法是什么?

c++ - 在构造过程中观察变体的状态

python - 属性还是方法?

java - 如何在java类文件中动态覆盖静态代码块

c++ - 寻求有关 FFT 模板的帮助