对于单纯常量,最好以const对象或enums替换#define
对于形似函数的宏,最好改用inline函数替换#define
/***************************
effectivre c++
改善程序与设计的55个具体做法
条款2:尽量以const,enum,inline替换#define
---------小鱼号的代码日记--------------
****************************/
#include<iostream>
using namespace std;
template<typename T>
void f(const T& max)
{
cout << max << endl;
}
template<typename T>
inline void callWidthMax(const T &a,const T & b)
{
f(a > b ? a:b);
}
#define CALL_WITH_MAX(a,b) f((a) >(b) ? (a):(b))
/*********************************
你必须记住为宏中的所有实参加上小括号
纵然加上小括号也会有不可思议的事情发生
**********************************/
int main()
{
int a= 5, b = 0;
CALL_WITH_MAX(++a,b); //a被累加二次
CALL_WITH_MAX(a++,b); //a被累加一次
return 0;
}
/*****************************************
总结:
对于单纯常量,最好以const对象或enums替换#define
对于形似函数的宏,最好改用inline函数替换#define
*********************************/
内容选自:
effectivre c++
改善程序与设计的55个具体做法
网友评论