C++ 评价实例的顺序

C++ 评价实例的顺序,c++,operator-precedence,C++,Operator Precedence,我试图在脑海中一劳永逸地确定表达式是如何计算的。在我的这个探索中,我想出了这个例子,我不知道该怎么做 #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;

我试图在脑海中一劳永逸地确定表达式是如何计算的。在我的这个探索中,我想出了这个例子,我不知道该怎么做

#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;
}
#包括
使用名称空间std;
typedef void(*func)(int);
无效r(内部i)
{
库特
两个预增量的副作用是相对顺序排列的


不,它们不是。每个参数的求值都是在其函数调用之前排序的,并且函数调用是相互排序的;但是这两个参数都可以在第一次调用之前进行求值,在这种情况下,它们之间没有顺序可循。

这取决于您所说的“预增量”是什么意思……您是这样读的:

  ++i
f(i)
      ++i
f (i) (i)
但你也可以轻松做到这一点:

 ++i
      ++i
 f(i)
 f(i) (i)
我不认为规范要求这样或那样