@cr4zzyguy

В чём разница операторы присваивания оператор равенства?

Я не понимаю чем и как отличаются операторы присваения от оператора равенства
в одном из видео по с++ парень разъяснял конструкции fi-else ветвлений и написал программу:
if (s=6 )
cout << " c=6 "
а после этого тоже самое, но
if (s == 6 )
cout << "c=6"
объясните в чем разница ?
  • Вопрос задан
  • 3069 просмотров
Пригласить эксперта
Ответы на вопрос 3
zagayevskiy
@zagayevskiy
Android developer at Yandex
разница в том, что
1) = присваивает тому, что слева, то, что справа. == Ничего никуда не присваивает.
2) == сравнивает то, что слева с тем, что справа. = Ничего не сравнивает, а только возвращает дальше полученное значение.

Когда вы пишете if (x = y), то иксу присваивается значение у. Затем это значение попадает в проверку if. В С++ исторически нет типа правда/ложь(boolean), его заменяет int. 0 - ложь, всё остальное - правда. Поэтому когда y - не 0, выполняется тело if.

Писать присваивание в условных конструкциях - дурной тон, потому что такой код труднее читать. Зато можно написать что-то в духе while(*dst++ = *src++);Домашнее задание - попробуйте понять, что тут написано, и какие типы должны быть у src и dst для того, чтобы это было осмысленно.

P.S. не смотрите больше видео "того парня", какой-то он странный путь выбрал для объяснения if-else.
Ответ написан
mmmaaak
@mmmaaak
в случае
s = 6
в переменную s записали значение s, эта операция вернет (если я правильно помню) значение, которое было присвоено (6), которое не является false и if срабатывает.
в случае
s == 6
значение переменной s сравнивается со значением 6 (и так как ранее в переменную s было присвоено 6, условие снова выполняется)
Ответ написан
Комментировать
@abcd0x00
Я не понимаю чем и как отличаются операторы присваения от оператора равенства

Это совсем разные операции. Операция присваивания записывает какое-то значение в переменную. Операция сравнения сравнивает значения, чтобы можно было знать, равны они или нет.

Операция присваивания в if'е (в условии) не используется никогда, но она может там случайно появиться из-за опечатки в операции сравнения. И при появлении об этом никак не будет сообщено, потому что синтаксически такая запись не считается неправильной. Поэтому такая опечатка может приводить к незаметной ошибке в программе, так как программа будет просто потихой неправильно работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы