"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=4294967295statt 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?
-
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).