在C++primer第五版P248页
class Screen{
public:
Screen &display( std::iostream &os )
{
do_display(os);
/**some unique part for non-const display**/;
return *this;
}
const Screen &display( std::iostream &os ) const
{
do_display(os);
/**some unique part for const display**/;
return *this;
}
}
private:
void do_display(std::iostream &os) const {/***/};
}
之前的疑惑是为什么要定义两个不同版本的display,一个const 一个是非const,它们看起来完成的工作差不多。编译器为什么不帮我们优化? 以下为个人观点
ANS: 我觉得,如果说两个不同版本的display如果做相同的事情,那只需要定义一个const 版本的就行了,非const对象和const对象都可以调用const版本的函数。既然定义了两个,它们肯定是有区别的。
而上述代码,正在是告诉我们如果有区别,怎么去从两个不同版本的函数中提取出common的方法,简化代码。所以归根结底就是编译器没必要给我们做这件事儿
1) 要是没区别我觉得定义一个const 版本就行了(感觉现在大多数工程里头都是这么做的,该const 的函数就const ,这个函数如果不必须需要一个const 版本那就没必要要再写一个非const 版本)。
2) 要是有区别,用上述方法, 提取出common的代码放在一个const 函数里面 (如do_display),简化代码又好维护。
网友评论