#define f(a,b) a*b+a*b
main(){
int i=1,j=5,k=8;
cout << f(++i + j++,j++ + ++k);
return 0;
}
输出
105
(为什么不是210?)
答案 0 :(得分:0)
因为#define
不定义任何功能。它执行宏替换,因此您的实际编译代码为:
cout <<
++i + j++ * j++ + ++k + ++i + j++ * j++ + ++k
;
显然是UB。它被评估为
cout <<
++i + (j++ * j++) + ++k + ++i + (j++ * j++) + ++k
// ^ ^ ^ ^
// Unexpected operator precedence!!
;