GuruoftheWeek#6:正确使用const
问题:
const是编写更安全代码的强大工具。而且,它可以帮助编译器进行优化。应该尽可能多地使用它...但什么是“尽可能多”?
不要批评下面这个程序的结构和其他风格,因为它只是用来举例说明的。请在适当的地方简单地添加或删除“const”(包括一些变量和相关的关键字)。附加问题是:程序在哪里会因为错误使用const而产生编译错误或未定义的结果?
class Polygon {
public:
Polygon():area _(-1){ }
void AddPoint(const Point pt){
InvalidateArea();
积分_。push _ back(pt);
}
point get point(const int I){
return points _[I];
}
int GetNumPoints(){
return points _。size();
}
double get area(){
if(area _ < 0)//if尚未计算并缓存
CalcArea();//现在计算
返回面积_;
}
private:
void InvalidateArea(){ area _ =-1;}
void CalcArea(){
area _ = 0;
vector::iterator I;
for( i = points_。begin();我!=积分_。end();++i )
area_ += /*一些工作*/;
}
向量点_;
double area _;
};
多边形运算符+( Polygon& lhs,Polygon & RHS){
Polygon ret = lhs;
int last = rhs。GetNumPoints();
for(int I = 0;I <最后;++i ) // concatenate
ret。添加点(rhs。GetPoint(I));
ret ret;
}
void f( const多边形和多边形){
const_cast(多边形)。AddPoint( Point(0,0));
0条评论