Menü
Avatar von iUniversEi
  • iUniversEi

209 Beiträge seit 26.10.2012

Mein Vorschlag: "Don't: Don't use unsigned"

Wie der Titel besagt, ist folgender Mythos weit verbreitet:

Don't use unsigned.

Sogar der Google Code Style Guide sagt "In particular, do not use unsigned types to say a number will never be negative. Instead, use assertions for this."

Wenn ein Wert aber nicht negativ sein darf, dann mache ich das im Code explizit. Eine Assertion steht im Function Body. Habe ich nur den Header, muss die Information entweder im Kommentar stehen und ich muss es aus dem Kontext erraten. Steht dort size_t weiß ich sofort, was erwartet wird.

Bounds checking: wenn meine Containergröße mit size_t arbeitet, dann ist index < size immer korrekt. Wenn es ein signed Integer ist, muss ich für absolute Korrektheit immer beide Bounds checken: index >= 0 && index < size.

Stell dir vor, du addierst auf eine Breite einen bestimmten Wert x.
Der Ausdruck width += x muss nicht auf Invalidität geprüft werden, wenn beides unsigned ist. Bei signed integern könnte x ja auch negativ sein und ich muss danach prüfen, ob width immer noch > 0 ist (oder vorher prüfen, ob x > -width). In aller Regel prüft hier aber niemand irgendwas, sondern verlässt sich einfach darauf, dass schon alles gut gehen wird. "Ich benutze meinen Code ja richtig, da kann nix passieren".

Bewerten
- +
Anzeige