私は、式がどのように評価されているかを一度だけ心に留めようとしています。そして、私のこの探求で、私は何を作るべきかわからないこの例を思いつきました.
#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 でコンパイルすると、警告が発生し (i に対する操作は未定義の可能性があります)、次の出力が生成されます: 1 2.
私が理解しようとしているのは、gcc 4.8.1 が未定義の動作の場合があると考える理由です。両方のプレインクリメントの副作用は、相互に関連して順序付けられます。
乾杯、アンドレイ