Jedną z rzeczy, których nie lubię w C++, jest operator porównania. Podczas, gdy w szkole od pierwszej klasy uczą nas, że znak równości oznacza się symbolem”=”, C++ używa tego znaku do… przypisywania wartości do zmiennej!

W czym problem

Ileż to razy przez roztargnienie próbowałem wykonać takie oto “porównanie”:

if (index = ITEM_COUNT) {
...
}

Program skompilował się bezbłędnie, uruchamiam, działa…ale niepoprawnie!. Co jest grane? Program, jakże sprytnie, najpierw przypisuje do zmiennej index wartość stałej ITEM_COUNT, a następnie sprawdza warunek. O ile tylko ITEM_COUNT będzie różne od zera, to wyrażenie zawsze zwróci TRUE! I szukaj tu igły…

Jak to naprawić

Żeby uchronić się przed tego typu błędami, można posłużyć zapisem odwrotnym:

if (ITEM_COUNT == index) {
...
}

Teraz, gdy przez przypadek zamiast operatora porównania użyję operatora przypisania (ITEM_COUNT = index) – kompilator natychmiast mnie o tym powiadomi (nie pozwoli przypisać wartości do stałej).

Related Posts: