JuniorДебаггингОчень частоЕщё не отвечали
Почему if (x = 0) уходит не в ту ветку?
При x, равном 5, печатается nonzero, x=0 — обе части удивляют автора.
int x = 5;
if (x = 0) {
std::cout << "zero";
} else {
std::cout << "nonzero, x=" << x;
}
Найдите и исправьте ошибку.
x = 0 — это присваивание, а не сравнение: оно записывает 0 в x, и выражение вычисляется в 0 (ложь), поэтому выполняется else, а x теперь 0. Автор имел в виду ==. Компиляторы предупреждают через -Wparentheses; некоторые стайл-гайды пишут if (0 == x).
- ✗Читать
=как==внутри условия - ✗Ожидать ошибку компиляции вместо тихого выбора неверной ветки
- ✗Не включать -Wparentheses, чтобы поймать опечатку
- →Почему запись
if (0 == x)превращает эту опечатку в ошибку компиляции? - →Чему равно значение выражения присваивания в C++?