我们经常定义#define的宏,比如
结果是:
建议这种情况,可以先取getint()的返回,赋值到临时变量再调用MIN。
上面的模板函数,返回用的S类型,有不足。
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
用来返回较小的一个值,很方便。但是如果x、y有一个是函数返回,那么这个函数会被访问两次。如:
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
int& getint()
{
cout << "Call GetInt Fun" << endl;
int x = 10;
return x;
}
int main()
{
std::cout << MIN(20, getint()) << std::endl;
return 0;
}
结果是:
Call GetInt Fun
Call GetInt Fun
10
建议这种情况,可以先取getint()的返回,赋值到临时变量再调用MIN。
或者可以做模板函数。如:
template <class T, class S>
S maxFun(T& t, S& s)
{
return t > s ? t : s;
}
template <class T, class S>
S minFun(T& t, S& s)
{
return t < s ? t : s;
}
上面的模板函数,返回用的S类型,有不足。
感兴趣的同学可以帮忙想办法优化一下