Я пытаюсь установить в уме раз и навсегда, как оцениваются выражения. И с этим моим поиском я придумал этот пример, который я не знаю, что делать.Пример оценочного примера
#include <iostream>
using namespace std;
typedef void(*func)(int);
void r(int i)
{
cout << i << endl;
}
func f(int i)
{
cout << i << endl;
return &r;
}
int main()
{
int i = 0;
f(++i)(++i);
return 0;
}
Имея этот кусок кода, скомпилированного MVSC 2008 будет производить этот выход: 2 2. Тот же код, но скомпилирован с GCC 4.8.1 вызовет предупреждение (операция на я может быть определен) и будет производить этот вывод: 1 2.
Что я пытаюсь понять, почему gcc 4.8.1 считает, что может быть случай неопределенного поведения? Побочные эффекты обоих предварительных приращений секвенированы относительно друг друга.
Приветствия, Андрей