0
#include <iostream>
int main()
{
    int a =1,b;
    b = ++a*a++; 
    std :: cout<< b << std::endl;

    return 0;
}

Объясните почему тут 6, а не 4?

lord
  • 31
  • 4
    Включаем варнинги и видим что-то типа warning: multiple unsequenced modifications to 'a'. Это неопределенное поведение. – HolyBlackCat Mar 15 '23 at 22:35

1 Answers1

0

Возможно это выполнилось следующим образом (по шагам):

  1. ++a * a++ //Значение a = 1;
  2. &a * a++ Префиксный инкремент увеличил значение "a" и вернул на нее ссылку (Обозначим, как &а). //Значение a = 2;
  3. &a * 2 Постфиксный инкремент вернул текущее значение переменной (т.е. 2) и увеличил значение "a". //Значение a = 3;
  4. 3 * 2 = 6;