我们定义一个宏:
#define MAX( a, b ) f( (a) > (b) ? (a):(b) ) //f是我们提前声明的一个函数
这时出现问题了。
现在使用这个宏:
int a = 5, b = 0;
MAX( ++a, b ); //a增加了两次
MAX ( ++a, b+10 ); //a累加了一次;
这样,尽管宏中的每个变量都加了括号,但是将该宏作为一个“函数”来提高效率时, 问题出现了,每次调用将产生对变量a的不同运算。
在C++中用模版可以很好解决这个问题(复用,效率 )。