没有运行时检查的优势:程序更小更快,效率更高。
那么,怎样让程序在编译或链接时就检查错误呢?
1.将某个类中的数据成员再写成一个类
如;假如要你写一个date类
class date
{
public:
date(int day,int month,int year);
...
}
在这个类中,day与month不一定就是你要的数值,需要进行合法性检查。
我们以month为例:
1.采用枚举类型不用整数
enum Month{Jan=1,Feb=2,...};
构造函数就会这样写:
date(int day,Month month,int year);
但是,这样并不会有多少好处,因为枚举类型不需要初始化。如:
Month m;
date d(22,m,1997);
2.用一个类来表示month,保证month只有合法才被创建。
class Month
{
public:
static const Month Jan(){return 1}
static const Feb() Feb(){return 2}
...
int asInt() const
{
return monthNumber;
}
private:
Month(int number):monthNumber(number){}
const int monthNumber;
}
运行时检查错误不可能完全避免,但是,还是要尽力在编译或链接时检查错误。
摘录自effective c++ 条款46