Mit meinem letzten Upgrade auf Mac OS X 10.9 hat sich die Standard-C++ - Standardbibliothek von libstdC++ in libC++ geändert. Seitdem beobachte ich das unerwartete Verhalten des Stringstream-Operators >> (doppelt), das im folgenden Codebeispiel dokumentiert ist.Diskrepanz zwischen dem istream-Operator >> (double & val) zwischen libC++ und libstdC++
Zusammenfassend scheint die libC++ Probleme beim Extrahieren von doppelten Werten aus Stringstreams zu haben, wenn auf den doppelten Wert ein Buchstabe folgt.
Ich habe bereits den Standard überprüft (2003), aber ich kann keine spezifischen Informationen finden, ob die Extraktion in diesem Fall funktioniert oder nicht.
So wäre ich dankbar für jede Eingabe, ob dies ein Fehler in libC++ oder libstdC++ ist.
#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");
}
Kompilieren des Codes mit c++ --stdlib=libc++ streamtest.cxx
gibt
'-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
Kompilieren des Codes mit c++ --stdlib=libstdc++ streamtest.cxx
gibt
'-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
Compiler Version ist
$ 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
Die lokale ist in beiden Fällen "C". –