美文网首页
关于定义两套成员函数的疑惑(const,非const)

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

作者: yaowang1 | 来源:发表于2015-06-24 16:57 被阅读0次

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

    相关文章

      网友评论

          本文标题:关于定义两套成员函数的疑惑(const,非const)

          本文链接:https://www.haomeiwen.com/subject/wrceqttx.html