"operator>> (std::istream&, unsigned int&)" Fehlerhaft???



  • Hallo,
    uns ist heute aufgefallen, dass der "operator>>(std::istream&, unsigned int&)" häufig nicht so funktioniert, wie erwartet. Folgendes Beispiel:

    #include <iostream>
    #include <sstream>
    
    int main(int argc, char* argv[])
    {
      std::istringstream s("-1");
      unsigned int n;
      s >> n;
      if (s)
        std::cout << "n=" << n << std::endl;
      else
        std::cout << "failed" << std::endl;
    }
    

    liefert mit den meisten Compilern n=4294967295 statt einfach fehl zu schlagen. Getestet habe ich gcc 4.7.2, xlc 9.0 auf AIX, SunStudio mit RW und stlport library auf Solaris. Lediglich der SunStudio mit RW-library hat "failed" ausgegeben. Es hat mich doch sehr irritiert, dass 3 von 4 Implementierungen der Standardbibliothek fehlerhaft sein sollten. Und ein älterer gcc (4.1 glaube ich) war auch noch dabei.

    Hat jemand eine Erklärung dafür?


  • Mod

    tntnet schrieb:

    Hat jemand eine Erklärung dafür?

    Ja. Das soll so sein. It's not a bug, it's a feature!



  • unsigned int a = -1;
    

    funktioniert auch. Siehe:

    4.7.2 schrieb:

    If the destination type is unsigned, the resulting value is the least unsigned integer congruent to the source integer (modulo 2^n where n is the number of bits used to represent the unsigned type). [ Note: In a two’s complement representation, this conversion is conceptual and there is no change in the bit pattern (if there is no truncation).


Anmelden zum Antworten