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.