关于定义两套成员函数的疑惑(const,非const)

2015-06-24  本文已影响0人  yaowang1

在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),简化代码又好维护。

上一篇下一篇

猜你喜欢

热点阅读