static_assert失败:结构的大小与所有属性的大小之和不同

问题描述

我是C ++语言的新手,我正在写一个数据结构,该结构用于对保存在本地计算机上的数据进行序列化/反序列化。代码数据结构如下所示:

struct DerMeasurementData
{
    float DerAnalogMeasValue = 0.0;
    int DerStatusMeasValue = 0;
    int DerMeasQuality = 0;
    time_t DerReadingTime = 0;
    time_t DerLastUpdateTime = 0;
};

// Ensure that comparison using memcmp will work correctly (currently there is 1 double value,2 integer value,2 time_t values in DerMeasurementData struct)
static_assert(sizeof(DerMeasurementData) == (sizeof(float) + 2 * sizeof(int) + 2 * sizeof(time_t)),"sizeof(DerMeasurementData) should be equal to summary size of it's fields");

但是,此代码无法编译,因为静态断言由于以下错误而失败:

Error (active)  E1574   static assertion failed with "sizeof(DerMeasurementData) 
should be equal to summary size of it's fields" dnom    D:\ETD_Repo\IDMS_Dev\dmsSource\portable\serialization\MappedSerializationNew.h  2571    

但是我不太明白为什么会这样。我的数据结构中有一个浮点数,两个整数和两个time_t,因此此结构的大小应与“(sizeof(float)+ 2 * sizeof(int)+ 2 * sizeof(time_t)”相同>

此外,当我将static_assert更改为以下代码时,它以某种方式起作用:

static_assert(sizeof(DerMeasurementData) == (sizeof(float) + 3 * sizeof(int) + 2 * sizeof(time_t))

有人可以让我知道为什么会这样吗?

最佳

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...