Странность ввода с++
Если запустить код:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
//cin>>a;
a=3;
b= ++a * a++;
cout<<b;
return 0;
}
,то программа выдает 20. Но если раскомментировать строку с cin>>a; то программа выводит 16,хотя в значении переменной "а" после 7-й строки кода в обоих случаях будет 3. С чем это связано?
Ответы (1 шт):
Просто вот такое выражение -
++a * a++;
является неопределенным поведением. И компилятор может увеличивать и умножать значения по-разному в разных ситуациях - это его дело, как поступать. В одном случае ему удобнее увеличить до 4, перемножить, потом еще раз увеличить и дать 16. В другом - увеличить, запомнить, увеличить второй раз, перемножить 4 на 5, дать 20.
Неопределенное поведение - оно такое неопределенное, такое противоречивое всё - как девица в "Покровских воротах"... :)