Найти тему

Особенности присваивания в С++

Пожалуй, одно из самых простых и понятных действий в программировании - это присваивание. В большинстве языков оператор присваивания имеет вид =. Но бывает и по другому, например, в Паскале это :=. И лично мне это больше нравится, потому что использование оператора = в некоторых случаях может привести к труднонаходимым ошибкам. Но сегодня поговорим о С++, а там, как известно, присваивание выполняется именно с помощью =. Например:

х = 2;

Здесь мы переменной х присвоили число 2, после чего х хранит значение 2.

Однако разработчики языка заметили, что в программах очень часто встречаются выражения вида:

Переменная = Переменная # Число

Где # - это какая-то бинарная операция, например, сложение (+):

Переменная = Переменная + Число

Из этой записи следует, что в Переменную записывается сумма значения Переменной и Числа.

Поскольку одна и та же Переменная находится по обе стороны от знака операции, то разработчики языка С (если не ошибаюсь, то именно они были первыми) придумали сокращённую запись:

Переменная += Число

то есть решили просто к оператору присваивания добавить знак операции, и не писать имя переменной два раза. Это, конечно, экономит время при разработке, особенно если имена переменных достаточно длинные. Смысл данного примера такой: “Значение Переменной увеличено на Число”. Например:

x += 2;

это то же самое, что и

x = x + 2;

Но код при этом становится короче, хотя и менее понятен для новичка.

Действия, выполняемые такими операторами, ещё называют составное присваивание. И в С++ допустимы следующие составные операторы присваивания: +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=.

Но здесь опять можно попасть в ловушку (С++ полон ловушек). Как вы думаете, чему будет равен х здесь:

int x = 100, y = 2;
x *= 100 + y;

Логично предположить, что здесь сохраняется приоритет операторов. То есть сначала выполняется умножение, а потом - сложение, и данное выражение эквивалентно следующему:

x = x * 100 + y;

Значит

x = 100 * 100 + 2 = 10002

Так?

Так, да не так. Потому что С++ был придуман специально для того, чтобы сводить с ума программистов, особенно начинающих )))

Поэтому выражение

x *= 100 + y;

на самом деле эквивалентно выражению

x = x * (100 + y);

а после этого х будет равен 10200.

Так что удачи вам в изучении С++ и ему подобных языков (а на основе С++ создано их довольно много).

И подписывайтесь на канал, чтобы ничего не пропустить…