Почему nlohmann / json сериализует «null» вместо «0» на double? - PullRequest
0 голосов
/ 09 октября 2018

Допустим, я частично инициализирую собственный двойной массив в 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?Это берет из памяти что-то "ноль"?Разве не 0 в C ++?

1 Ответ

0 голосов
/ 09 октября 2018

Поведение шага сериализации и, как это ни парадоксально, всей программы, равно undefined .

В C ++ вы должны никогда пытаться прочитать неинициализированную память, если не приведен к типу unsigned char.

Характер изменяющегося вывода "иногда" является проявлением этого неопределенного поведения.

...