隨着我最近升級到Mac OS X 10.9,默認標準C++庫從libstdC++更改爲libC++。從那以後,我觀察到以下代碼示例中記錄的stringstream運算符>>(double)的意外行爲。istream操作符>> libC++和libstdC++之間的>>(double&val)差異
總之,當double值後面跟一個字母時,libC++似乎在從stringstream中提取double值時會出現問題。
我已經檢查過標準(2003),但如果提取應該在這種情況下工作,我找不到任何特定的信息。
所以我很感激任何輸入,無論這是libC++還是libstdC++的錯誤。
#include <sstream>
#include <iostream>
using namespace std;
void extract_double(const string & s)
{
stringstream ss;
double d;
ss << s;
ss >> d;
if(!ss.fail())
cout << "'" << ss.str() << "' converted to " << d << endl;
else
cout << "'" << ss.str() << "' failed to convert to double" << endl;
}
int main()
{
extract_double("-4.9");
extract_double("-4.9 X");
extract_double("-4.9_");
extract_double("-4.9d");
extract_double("-4.9X");
}
編譯與c++ --stdlib=libc++ streamtest.cxx
代碼給
'-4.9' converted to -4.9
'-4.9 X' converted to -4.9
'-4.9_' converted to -4.9
'-4.9d' failed to convert to double
'-4.9X' failed to convert to double
編譯與c++ --stdlib=libstdc++ streamtest.cxx
代碼給
'-4.9' converted to -4.9
'-4.9 X' converted to -4.9
'-4.9_' converted to -4.9
'-4.9d' converted to -4.9
'-4.9X' converted to -4.9
編譯器版本是
$ c++ --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix
在這兩種情況下,本地都是「C」。 –