2015-08-23 13 views
5

Il seguente codice stampa su mac osx con clang. In tutti gli altri la stampa (clang, gcc)std :: istringstream >> per raddoppiare il comportamento strano

#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 

Quando uso int viene stampato 5 come previsto ..

Come operator>> of std::istringstream lavoro e perché questo sta accadendo? C'è un modo per farlo funzionare in modo coerente? (che è estratto 5)

risposta

3

La parte rilevante dello standard è [istream.formatted.arithmetic]. Il comportamento dell'estrattore dipende dall'oggetto num_get<> della locale.

C'è un errore nella funzione libC++ num_get::do_get per double, descritto in this bug report. Su altre piattaforme, è probabile che si usi libstdC++, che fornisce il comportamento che ci si aspetta.

Problemi correlati