std::istringstream >> 加倍奇怪的行为
std::istringstream >> to double weird behaviour
以下代码在 mac osx 上打印 0 并发出 clang。它在其他任何地方打印 5 (clang, gcc)
#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)
标准的相关部分是[istream.formatted.arithmetic]
。提取器行为取决于语言环境的 num_get<>
对象。
double
的 libc++ num_get::do_get
函数中存在错误,描述为 in this bug report。在其他平台上,您可能会使用 libstdc++,它会提供您期望的行为。
以下代码在 mac osx 上打印 0 并发出 clang。它在其他任何地方打印 5 (clang, gcc)
#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)
标准的相关部分是[istream.formatted.arithmetic]
。提取器行为取决于语言环境的 num_get<>
对象。
double
的 libc++ num_get::do_get
函数中存在错误,描述为 in this bug report。在其他平台上,您可能会使用 libstdc++,它会提供您期望的行为。