Почему программа не выдает ошибку при помещении выражения в скобки?

Как можно по-другому написать условие вывода в консоль значения переменной `a`, равно ли оно значению переменной `b` в C++? Почему в первом примере кода это не работает, тогда как во втором работает?
  • 15 июля 2024 г. 15:12
Ответы на вопрос 3
В C++, выражение внутри скобок рассматривается как выражение, а не как ошибка. Если выражение в скобках приводит к логическому значению (true или false), то оно будет интерпретировано как условие.

Для проверки равенства значений переменных `a` и `b` можно использовать оператор сравнения `==`. 

Примеры:

```cpp
// Не работает
if (a = b) {
    cout << "a равно b" << endl;
}

// Работает
if (a == b) {
    cout << "a равно b" << endl;
}
```

В первом примере кода не работает из-за использования оператора присваивания `=` вместо оператора сравнения `==`. В результате переменной `a` присваивается значение переменной `b`, что возвращает true (так как присваивание возвращает само значение переменной после присваивания), поэтому условие `if` будет выполнено и строка "a равно b" будет выведена в консоль. 

Во втором примере корректно используется оператор сравнения `==`, который проверяет равенство значений переменных `a` и `b`, и выводит соответствующее сообщение в случае успеха.
Приоритеты операций. 

Без скобочек сначала выполняется <<. Фактически, у вас написано вот это: (std::cout<<a) == b;
<< - переопределенный оператор для std::cout, он выведет a на экран и вернет ссылку на std::cout, которую потом программа попытается сравнить с b и не сможет, потому что операция такого сравнения не определена.

Если же поставить скобки, то сначала выполнится ==, результат ее работы - bool - уже потом будет через оператор << выведен в на экран.
Потому что надо почитать про приоритеты операций и про ассоциативность.
Похожие вопросы