有人可以解释为什么b = 150?
#define CUBE(X) ((X) * (X) * (X))
using namespace std;
int main( void )
{
int a = 3,b = 0;
cout << "before "<< endl;
cout << "a = " << a;
cout << endl;
cout << "b = " << b;
cout << endl;
cout << "after"<< endl;
b = CUBE( ++a );
cout << "a = " << a;
cout << endl;
cout << "b = " << b;
getchar();
return 0;
}
答案 0 :(得分:10)
因为您正在使用宏。宏不是函数。
该行:
b = CUBE( ++a );
重写为:
b = ((++a) * (++a) * (++a))
在代码编译之前。
The code then invokes Undefined Behaviour因为您在序列点之间多次增加a
。
如果你改用函数会更好。
答案 1 :(得分:3)
(++a) * (++a) * (++a)
是undefined behaviour。
答案 2 :(得分:3)
未定义的行为 - 您在序列点之间多次修改a
。这就是为什么inline
函数是非常优越的选择。