#define使用问题
#include <iostream>
using namespace std;
#define func_max(a,b) f((a)>(b)? (a):(b)) //即使加上所有的小括号,仍有奇怪问题发生
void f(int n)
{
cout<<"func="<<n<<endl;
}
int main()
{
int a = 5, b = 0;
func_max(++a, b); //a实际加了两次
cout << "test1: "<<"b= "<<b<<", a=" << a << endl;
b += 10;
func_max(++a, b ); //a加了一次
cout << "test1: " << "b= " << b << ", a=" << a << endl;
}
a的递增数量竟然取决于它被拿来和谁比较
优化方法:
#include <iostream>
using namespace std;
void f(int n)
{
cout<<"func="<<n<<endl;
}
template<typename T>
inline void func_max(const T& a, const T& b)
{
f(a > b ? a : b);
}
int main()
{
int a = 5, b = 0;
func_max(++a, b);
cout << "test1: "<<"b= "<<b<<", a=" << a << endl;
b += 10;
func_max(++a, b );
cout << "test1: " << "b= " << b << ", a=" << a << endl;
}