Ich bezweifle ernsthaft, dass Ihr Programm buchstäblich “Garbage Value” ausgibt.
– molbnilo
6. Februar 2018 um 15:30 Uhr
Es sollte nicht sein. Es ist ein vorzeichenloser Typ, es gibt keine negativen Werte.
– Justin Randall
6. Februar 2018 um 15:32 Uhr
@molbdnilo: Das ist eine gute Frage. Ich muss es überprüfen, aber ich denken das Verhalten von cout ist die Implementierung definiert für unsigned Typen ab einer bestimmten Größe. Scheint, dass theoretisch “Garbage Value” vom Standard erlaubt ist.
– Bathseba
6. Februar 2018 um 15:37 Uhr
@ Bathsheba, soweit ich das beurteilen kann operator<< und num_put::do_putein unsigned long long Standardmäßig werden andere Einstellungen wie ein Aufruf an ausgegeben printf("%ull", val), und ebenso für andere grundlegende unsigned Typen. Ich bin mir nicht sicher, ob Sie ein potenzielles Problem haben würden size_tda es entweder zu einer Überladung passen oder eine Mehrdeutigkeit verursachen würde.
– Chris
6. Februar 2018 um 16:16 Uhr
myints.size() ist ein ohne Vorzeichen Typ: formal a std::vector<int>::size_type. Subtrahieren 1 von einem vorzeichenlosen Typ mit einem Wert von 0 führt in Ihrem Fall zu Wrap-Around-Effekten
Schau dir den Typ an.
– Chris
6. Februar 2018 um 15:30 Uhr
Ich bezweifle ernsthaft, dass Ihr Programm buchstäblich “Garbage Value” ausgibt.
– molbnilo
6. Februar 2018 um 15:30 Uhr
Es sollte nicht sein. Es ist ein vorzeichenloser Typ, es gibt keine negativen Werte.
– Justin Randall
6. Februar 2018 um 15:32 Uhr
@molbdnilo: Das ist eine gute Frage. Ich muss es überprüfen, aber ich denken das Verhalten von
cout
ist die Implementierung definiert fürunsigned
Typen ab einer bestimmten Größe. Scheint, dass theoretisch “Garbage Value” vom Standard erlaubt ist.– Bathseba
6. Februar 2018 um 15:37 Uhr
@ Bathsheba, soweit ich das beurteilen kann
operator<<
undnum_put::do_put
einunsigned long long
Standardmäßig werden andere Einstellungen wie ein Aufruf an ausgegebenprintf("%ull", val)
, und ebenso für andere grundlegende unsigned Typen. Ich bin mir nicht sicher, ob Sie ein potenzielles Problem haben würdensize_t
da es entweder zu einer Überladung passen oder eine Mehrdeutigkeit verursachen würde.– Chris
6. Februar 2018 um 16:16 Uhr