1.条款之const,enum,inline代替宏定义
#include <iostream>
using namespace std;
const int a = 5;
const int b = 6;
enum{
i,
j
};
template <typename T>
inline int callwithMax(const T&a ,const T&b)
{
return (a>b?a:b);
}
int main(int argc,char *agcv[])
{
int c= 2;
// c=callwithMax(a,b); //result 6
c=allwithMax(i,j); //result 1
printf("%d",c);
return 0;
}
使用此规则,是因为const,enum所使用的名称会进入记号表,而宏定义的名称可能进不去。使用inline代替宏定义,提供了类型安全性。
2.条款之尽可能使用const
(1)const的使用
#include <iostream>
using namespace std;
int main(int argc,char *agcv[])
{
int d = 4;
int *const e = &d;
int f = 0;
int const *g = &f;
int c= 2;
// *e = 5; 这是对的
// e = &f; 这是错的,指针为常量不可赋值
// g = 5; 这是错的,值为常量不可赋值
g = &d; //这是对
}
(2)const_iterator 和 const 迭代器的区别
#include <iostream>
#include <vector>
using namespace std;
int main(int argc,char *argv[])
{
vector<int> vec;
const vector<int>::iterator iter = vec.begin();
*iter = 10; //正确
//++iter; 错误,对指针操作
vector<int>::const_iterator iter2 = vec.begin();
//*iter = 10; 错误,对值操作
++iter2; //正确
return 0;
}
参考文献《Effective C++》作者 Scott Meyers 翻译 候捷