0

假设我部分初始化了一个本地双数组C++并使用以下命令对其进行序列化nlohmann/json

const int numPoints = 10;
double mLengths[numPoints];
for (int i = 0; i < 5; i++) {
    mLengths[i] = i + 0.1 * i; 
}

nlohmann::json jsonData;
jsonData["lengths"] = mLengths;
std::string serialized_string = jsonData.dump();

它将正确序列化如下内容:

{  
   "lengths":[  
      0.0,
      1.1,
      2.2,
      3.3,
      4.4,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      -9.255963134931783e+61
   ]
}

但有时,它不是从内存中获取“随机双精度”,而是在 json 中存储值 null,因此会产生如下结果:

{  
   "lengths":[  
      0.0,
      1.1,
      2.2,
      3.3,
      4.4,
      -9.255963134931783e+61,
      -9.255963134931783e+61,
      null,
      -9.255963134931783e+61,
      -9.255963134931783e+61
   ]
}

当我反序列化它时,它给我抛出了一个异常type must be number, but is null

为什么它序列化null而不是0?它是否会从记忆中获取“空”的东西?C++中不是0吗?

4

1 回答 1

3

序列化步骤的行为,因此自相矛盾的是整个程序,是undefined

在 C++ 中,您绝不能尝试读取未初始化的内存,除非您强制转换为unsigned char类型。

变化输出的“有时”性质是这种未定义行为的表现。

于 2018-10-09T07:08:55.823 回答