ramlife

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

问题

今天在写头文件的时候,定义一个通讯协议使用的 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

posted on 2023-02-06 16:31  ramlife  阅读(36)  评论(0编辑  收藏  举报