Проблема необязательности фигурных скобок в условиях в C++
Несмотря на то, что C++ допускает показанные выше сокращения с фигурными скобками, я в общем-то не рекомендую так делать, так как это рассадник трудноуловимых ошибок.
Пусть к примеру есть следующий код:
int num = 3;
if (num > 0)
std::cout << num << "\n";
Пусть теперь мы решили в том случае, если условие выполняется, сделать еще и второй вывод:
int num = 3;
if (num > 0)
std::cout << num << "\n";
std::cout << "Y" << "\n";
Однако без фигурных скобок внутри условия находится только первый вывод, то есть первый вывод будет срабатывать при верном условии, а второй - всегда.
Фактически наш код эквивалентен такому:
int num = 3;
if (num > 0) {
std::cout << num << "\n";
}
std::cout << "Y" << "\n"; // эта строка оказалась снаружи условия
А мы бы хотели такой код:
int num = 3;
if (num > 0) {
std::cout << num << "\n";
std::cout << "Y" << "\n"; // эта строка внутри условия
}
Именно поэтому рекомендуется всегда выполнять расстановку фигурных скобок, дабы не попадать в такого рода ошибки.
Не запуская код, определите, что выведется на экран:
int num = 5;
if (num == 5)
std::cout << num << "\n";
std::cout << "Y" << "\n";
Не запуская код, определите, что выведется на экран:
int num = 0;
if (num == 5)
std::cout << num << "\n";
std::cout << "Y" << "\n";
Не запуская код, определите, что выведется на экран:
int num = 0;
if (num == 5)
std::cout << num << "\n";
std::cout << "N" << "\n";
std::cout << "Y" << "\n";