OSx上的非法浮点格式,但不是Linux

时间:2016-03-08 18:47:23

标签: c++ macos

使用g++编译器,下面的代码会在Macbook pro上抛出Illegal floating-point format错误,但在使用g++clang++编译的Fedora上运行时没有错误。

问题:为什么它不适用于Mac,有没有办法让它在Mac上运行

#include <iostream>
#include <sstream>

double stringToReal(std::string str) {
   std::istringstream stream(str);
   double value;
   stream >> value >> std::ws;
   if (stream.fail() || !stream.eof()) {
      std::cerr << "stringToReal: Illegal floating-point format (" << str << ")";
   }
   return value;
}

int main() {
    std::cout << stringToReal("1.457460091727E12");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

这对我来说就像是一个OS X漏洞。尝试在EOF上读取std::ws是在流上设置失败位,但它不应该。如果在字符串中附加任何空格,则错误就会消失。

更新

实际上,它可能是Fedora的错误。根据{{​​3}},std::ws“表现为UnformattedInputFunction”,并说明UnformattedInputFunction

  

如果在输入流上设置了eofbitbadbit,那么也设置failbit,如果在此输入流的异常掩码中启用failbit上的例外,抛出ios_base::failure

读入value会设置eof位,因此读入std::ws实际上应设置失败位。