feature schrieb:
SeppJ schrieb:
Ich bin mir nicht 100% sicher, ob das Lesen von negativen Zahlen ein erlaubtes Feature oder ein verlangtes Feature ist (keine Zeit, nachzugucken), aber es gibt Standardbibliotheken, die ein Minuszeichen lesen und dann entsprechend umbrechen (also -1 zum Maximalwert usw.).
Es ist vorgeschrieben, dass dann UINT_MAX zugewiesen wird und kein Fehlerbit gesetzt wird.
Nicht ganz. Hatte Zeit den Standard zu lesen und man muss bei diesen Operationen eben bis zur untersten Ebene gehen, daher ist es so schwer, das Standardverhalten genau nach zu vollziehen. strtoull gibt nämlich bei einem negativen Wert nämlich das umgebrochene Ergebnis zurück.
Das ist äußerst verwirrend formuliert im Standarddokument (7.20.1.4,5 und 7.20.1.4,8 in C99) , aber das ist wohl sowohl Intention des (C-)Standards und es ist auch, wie es alle mir bekannten Implementierungen es handhaben (und damit indirekt auch istream::operator>>).
Man bemerke, dass bei int und short das Failbit gesetzt wird, falls ein Overflow passiert, bei allen anderen Typen nicht.
Sinn=0
lol. Vermutlich ein Relikt aus der Zeit, als long noch der größte Basisintegertyp war und nicht long long.