首先,有些人会问?为啥要使用const,我使用宏定义不是照样可行?
开发C++已有五年多的时间了,有时当遇到需要定义常量时,总有一个问题一直很疑惑,到底是用宏定义#define,还是用const修饰。现在终于有了答案,废话不多说,先上代码
#define CALL_WITH_MAX(A,B) F((A) > (B) ?(A) : (B));
光看这个宏,就有太多的缺点,首相你要使用它,不能忘记加小括号。即使你加了小括号,也会引起非常严重的错误
int A=5,B=0;
CALL_WITH_MAX(++A,B);//A将会递增2次
CALL_WITH_MAX(++A,B+10); //A将递增1次
从上面的验证不难看出,A的递增并非是我们想要的结果。
那么,有没有更好的办法来避免这种情况呢?
再看下面的代码:
template<typename T>
inline void CALL_WITH_MAX(const T& A,const T& B) {
f( A > B ? A :B);
}
有人会问,为啥这么做就能避免上面的情况发生呢?
主要是因为当用const 修饰符时,就等于你告诉编译器说:嘿,我在这加const了哈,值不能被修改了。
所以说,养成用const的良好习惯,对你的代码效率会有很大的提升,也使你的代码的错误几率降低。