C++; Выражения с оператором присваивания, содержащие переменную в обеих частях

Выражения с оператором присваивания, которые содержат переменную в обоих частях

Как это работает?

Помните, что оператор присваивания сначала вычисляет значение выражения слева, а только потом записывает его в переменную справа. Можно ли использовать одну и ту же переменную и справа и слева? Оказывается, что можно.

#include<iostream>

using namespace std;

int main()
{
    int foo = 2;             // заводим переменную foo и записываем в нее 2
    cout << foo << endl;     // выводим на экран значение переменной foo

    cout << foo + 2 << endl; // выводим на экран значение переменной выражения foo + 2
                             // в foo лежало значение 2, значит foo + 2 равно 4

    foo = foo + 2;           // записываем в foo значение выражения foo + 2, то есть 4
    cout << foo << endl;     // выводим на экран значение переменной foo
}

Что делает программа подробно написано в комментариях, но давайте для большей ясности подробно обсудим ее вывод.

2
4
4

Двойка в первой строчке — это значение, которое мы записали в foo командой int foo = 2;. Четверка во второй строчке — значение выражения foo + 2. Его мы записываем в переменную foo командой foo = foo + 2;, а потом выводим на экран командой cout << foo << endl;. Поэтому в последней строчке вывода тоже стоит четверка.

Смешиваем операторы

Несмотря на то, что на первый взгляд может показаться, что такие операции не нужны, на деле они оказываются очень полезными. Настолько полезными, что для них даже придумали специальные сокращения.

Например строчка foo = foo + 2 эквивалентна строчке foo += 2. Операторы = и + как бы смешали, и получился оператор, который прибавляет к переменной значение выражения, которое написано справа. Вот список таких операторов:

оператор пример эквивалентный пример
+= foo += 2 foo = foo + 2
-= foo -= 2 foo = foo — 2
*= foo *= 2 foo = foo * 2
/= foo /= 2 foo = foo / 2

Инкремент и декремент

На самом деле, полезными оказываются даже еще более специальные операторы инкремента и декремента. Инкрементом (++) называют операцию увеличения на единицу, а декриментом (--) операцию уменьшения на единицу. Давайте посмотрим на пример использования этих операций.

#include<iostream>

using namespace std; 

int main(){
    int foo = 1;
    foo++;  // применили операцию инкремента к переменной foo
            // теперь foo увеличилось на 1 и стало равным 2
    cout << "foo = " << foo << endl; // выводит "foo = 2"
    foo--;  // применили операцию декремента к переменной foo
            // теперь foo уменьшилось на 1 и стало равным 1
    cout << "foo = " << foo << endl; // выводит "foo = 1"
}

Таким образом есть целых три эквивалентных способа увеличить значение переменной на единицу.

foo++;
foo += 1;
foo == foo + 1;

Аналогично есть три способа уменьшить число на единицу, в качестве упражнения назовите эти три способа.

Откуда взялось название C++?

Теперь мы знаем, что оператор ++ увеличивает значение переменной на единицу. C++ — потомок языка C, в котором тоже есть оператор инкремента, а значит его название можно расшифровать как «на единицу больший чем C» или «следующий за C».