假设我在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
]
}
但是有时,它不是从内存中获取“随机双精度”,而是将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?
答案 0 :(得分:3)
序列化步骤的行为,因此是整个程序的矛盾之处,是未定义。
在C ++中,您必须从不尝试读取未初始化的内存,除非您将其强制转换为 .opacity-animation{
-webkit-animation-name: flickerAnimation;
-webkit-animation-duration: 2s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-delay: 0.5s;
}
@keyframes flickerAnimation {
0% { opacity:1; }
50% { opacity:0; }
100% { opacity:1; }
}
@-o-keyframes flickerAnimation{
0% { opacity:1; }
50% { opacity:0; }
100% { opacity:1; }
}
@-moz-keyframes flickerAnimation{
0% { opacity:1; }
50% { opacity:0; }
100% { opacity:1; }
}
@-webkit-keyframes flickerAnimation{
0% { opacity:1; }
50% { opacity:0; }
100% { opacity:1; }
}
类型。
变化的输出的“有时”性质是这种不确定行为的体现。