std :: istringstream>>加倍奇怪的行为

时间:2015-08-23 14:29:48

标签: c++ macos c++11 clang clang++

以下代码使用clang在mac osx上打印 0 。其他任何地方都打印 5 clanggcc

#include <iostream>
#include <sstream>

int main() {
    std::istringstream iss("5C3");

    double n;
    iss >> n;

    std::cout << n << std::endl;

    return 0;
}
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

当我使用int时,它按预期打印5 ..

operator>> of std::istringstream如何运作以及为什么会这样?有没有办法让它以一致的方式运作? (即摘录5)

1 个答案:

答案 0 :(得分:3)

标准的相关部分是[istream.formatted.arithmetic]。提取器行为取决于区域设置的num_get<>对象。

num_get::do_get的libc ++ double函数中存在一个错误,描述为in this bug report。在其他平台上,您可能正在使用libstdc ++,它可以提供您期望的行为。