如何从 std::istream 解析浮点无穷大

ska*_*let 5 c++ floating-point serialization

我为我正在从事的项目编写了一个超级愚蠢的序列化库。我刚刚被浮点无穷大所困扰,我用下面的示例程序来说明这一点。我希望程序能够打印inf -> int,但它却打印了inf -> 0。如何使用std::ostreamstd::istream接口来修复它,以给出浮点无穷大(和 NaN)的正确答案?

#include <limits>
#include <sstream>
#include <iostream>

void serialize(std::ostream& dst, float src) {
    dst << src;
}

void deserialize(float& dst, std::istream& src) {
    src >> dst;
}

int main() {
    const float original = std::numeric_limits<float>::infinity();
    std::stringstream buffer;
    serialize(buffer, original);
    float parsed;
    deserialize(parsed, buffer);
    std::cout << original << " -> " << parsed << '\n';
}
Run Code Online (Sandbox Code Playgroud)