Расхождение между оператором istream >> (double & val) между libc ++ и libstdc ++
С моим недавним обновлением до Mac OS X 10.9 стандартная библиотека C ++ по умолчанию изменилась с libstdc ++ на libc ++. С тех пор я наблюдаю неожиданное поведение оператора stringstream >>(двойной) задокументировано в примере кода ниже.
Таким образом, в libc ++, похоже, возникают проблемы с извлечением двойных значений из строковых потоков, когда за двойным значением следует буква.
Я уже проверил стандарт (2003), но могуНе можете найти какую-либо конкретную информацию, если извлечение должно работать в этом случае или нет.
Поэтому я был бы благодарен за любой вклад, будь то ошибка в libc ++ или libstdc ++.
#include
#include
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");
}