1.问题分析
string为basic_string的typedef,对于basic_string我们看到里面:
template<typename _CharT, typename _Traits,...size_t,64位机器上是8字节,指针也是8字节.因此,上述我们可以知道内存结构为
8字节内存指针
8字节字符串长度
匿名的enum,并没有用一个枚举去声明一个名,不占内存.
16字节联合体
故string...内部按8字节对齐,共占32字节大小.
2.解析答案
现在回到上面那个问题上:
结构体A的内部结构通过上述的string,我们知道如下:
4字节int
8字节long
32字节string
而32字节又可以被展开为...:
8
8
16
根据string我们知道是8字节对齐,据此得出A为8字节对齐.
int+long为12,需要填补到8的倍数边界,故为16,而string为32,不用变,因此最后为16+32=48....拓展:在一个类中声明一个enum或者结构体,只要没有定义是不占大小的.而union只出现了,就会占大小.例如:
class A{
private:
class B {
int a