Ta deklaracja kompiluje bez ostrzeżenia w g ++ -pedantic -Wall (wersja 4.6.3):Jak wykryć liczbę ujemną przypisaną do size_t?
std::size_t foo = -42;
Mniej widoczny podrobiony deklaruje funkcję z argumentem size_t i nazywając ją z wartością ujemną. Czy taka funkcja może zabezpieczyć się przed nieumyślnym negatywnym argumentem (który pojawia się jako szesnaście kwintillionu, przestrzegając §4.7/2)?
Niekompletne odpowiedzi:
Tylko zmieniając size_t do (podpisany) długich odrzutów semantyki i inne zalety size_t.
Zmiana na ssize_t jest zwykłym POSIX, a nie standardowym.
Zmiana na ptrdiff_t jest krucha, a czasem zepsuta.
Testowanie ogromnych wartości (zestaw bitów wysokiego rzędu itd.) Jest arbitralne.
Powiązane http://stackoverflow.com/questions/2711522/what-happens-if-i-assign-a-negative-value-to-an-unsigned-variable – halex
+1 dla "mnoga kwintillion". Jk, +1, bo to dobre pytanie. –
Dziękuję, halex. Właśnie tam przytoczyłem standard. –