GuruoftheWeek#6:正确使用const

GuruoftheWeek#6:正确使用const,第1张

GuruoftheWeek#6:正确使用const,第2张

问题:
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));

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » GuruoftheWeek#6:正确使用const

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情