Sam Bown Ответов: 4

Как инкремент происходит в C++ ?


#include<iostream>
    using namespace std;

    void sum(int a,int b,int &c)
    {
        c = a++ + b++;
    }
    int main()
    {
        int a = 10, b= 20,c;

        sum(a,b,c);
        cout<<a<<"  "<<b<<" "<<c<<endl;
        return 0;
    }


Что я уже пробовал:

значение c должно было быть присвоено как 33 но вместо этого оно просто 30
Пожалуйста, помогите понять это

4 Ответов

Рейтинг:
18

OriginalGriff

Вы можете посмотреть здесь: Почему x = ++x + x++ дает мне неправильный ответ?[^] - это объясняет, что происходит, даже если вы не делаете действительно глупых вещей с пре - и пост - инкрементом.


Рейтинг:
1

Dave Kreskowiak

Здесь есть куча проблем, но ответ неверен, потому что эти постфиксные операторы ++ выполняются после того, как выражение + вычисляется в вашем методе sum.

Таким образом, он складывает 10 и 20 вместе и устанавливает результат равным 30, а затем увеличивает значения a и b. но поскольку a и b передаются "по значению", а не "по ссылке", как c, значения a и b в вашем основном методе всегда будут равны 10 и 20.


Рейтинг:
1

Patrice T

Цитата:
значение c должно было быть присвоено как 33 но вместо этого оно просто 30

30-это правильный результат для этого кода!
Ваш код означает::
void sum(int a,int b,int &c)
{
    //c = a++ + b++;
    c = a + b; // 30 is the correct result!
    a = a + 1;
    b = b + 1;
}

что является пост-инкрементом.
Если вы используете предварительное приращение, то правильный результат будет равен 32:
void sum(int a,int b,int &c)
{
    //c = ++a + ++b;
    a = a + 1;
    b = b + 1;
    c = a + b; // 32 is the correct result!
}


Рейтинг:
1

Ron Anders

Попробуй:

c = (a++) + (b++);

Я думаю.


Richard MacCutchan

Попробовать это.