假设我在 C++
中部分初始化了一个原生 double 组,并使用 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
]
}
但有时,它不是从内存中获取“随机 double ”,而是将值 null 存储在 json 中,因此它会产生如下结果:
{
"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 吗?
最佳答案
序列化步骤的行为,以及整个程序的行为,未定义。
在 C++ 中,您必须永远尝试读取未初始化的内存,除非您强制转换为 unsigned char
类型。
不同输出的“有时”性质是这种未定义行为的表现。
关于c++ - 为什么 nlohmann/json 在 double 上序列化 "null"而不是 "0"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52715143/