问题
今天在写头文件的时候,定义一个通讯协议使用的 struct,为了协议整体的一致性,在内部嵌套了一个空的 struct,按照以往用 c 写的通讯协议,这样是没什么问题的。结果在计算大小的时候,发现在 c++ 中这个空 struct 占用了一个字节。
解答
经过网上搜索之后,发现是因为 c++ 有规定: C++语言标准中规定了这样一个原则:“no object shall have the same address in memory as any other variable”。
应该是为了防止 除0 异常。 比如:
T array[5];
int count = &array[4] - &array[0]; // 等价于 count = ((char *)&array[4] - (char *)&array[0]) / sizeof T;
参考:
C++中的空类与空结构体大小
https://www.cnblogs.com/kuliuheng/p/4104213.html