Vorzeichen

17. Juli 2009

Beim Code-Review von Änderungen, die ein Kollege gemacht hat, bin ich über das hier gestolpert. Aus

if (s.find('x')==0)

hat der Kollege

if (s.find('x')>=0)

gemacht. Das ganze ist C++ und s ist ein std::string. Die Intention war, das Zeichen in dem String nicht nur an der ersten Position zu finden, sondern irgendwo. Der Fix wirkte sogar, hatte aber unangenehme Nebenwirkungen. Ich trau mich kaum zu erklären, was hier faul ist, weil es so trivial ist:

Die find-Methode liefert im Falle des Nichtfindens string::npos zurück. Das ist zwar typischerweise als

static const size_type npos = -1;

definiert. –1 ist ja kleiner als Null. Nur ist aber size_type ein unsigned int. Damit sind alle möglichen Werte, die ein size_type annehmen kann, immer größer oder gleich Null.

Advertisements