c – 派生类比基类大,即使它由引用变量组成
从我到目前为止所读到的,似乎参考变量根本不应该占用任何内存.相反,它们被视为它们引用的完全相同的变量,但具有另一个名称.
但是,当我运行以下代码时,似乎并非总是如此: #include <cstdio> struct A { int m[3]; }; struct B: A { B():x(m[0]),y(m[1]),z(m[2]){} int& x; int& y; int& z; }; int main(){ printf("%u,%un",sizeof(A),sizeof(B)); return 0; } 输出: 12,40 为什么B比A大得多? 有没有其他方法可以访问,例如B.m [0]与B.x? 解决方法
你应该进一步阅读;) 所以你看到的基本上是A plus padding的大小加上三个指针的大小.我猜你是64位系统,其中sizeof(int)是4而sizeof(void *)是8: 12 bytes for the A subobject (4 for each int) + 4 bytes padding (to get to a multiple of 8 bytes) +24 bytes for the 3 references/pointers in B (8 for each one) -------------- 40 bytes total 对于您的其他问题,给定B类型的对象b,您可以直接访问b.m [0],因为它在A中是公共的并且是公开继承的.在没有您遇到的参考开销的情况下给它另一个名称是不可能的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |