当前位置:  开发笔记 > 编程语言 > 正文

"get()const"与"getAsConst()const"

如何解决《"get()const"与"getAsConst()const"》经验,为你挑选了2个好方法。

有人告诉我他们团队中的C++风格差异.我有我自己关于这个问题的观点,但我会感兴趣的优点缺点,从大家的到来.

因此,如果您有一个类属性,您希望通过两个getter,一个读/写,另一个readonly(即没有set方法)公开.至少有两种方法:

class T ;

class MethodA
{
   public :
      const T & get() const ;
      T & get() ;

      // etc.
} ;

class MethodB
{
   public :
      const T & getAsConst() const ;
      T & get() ;

      // etc.
} ;

每种方法的优点和缺点是什么?

我更感兴趣的是C++技术/语义原因,但也欢迎样式原因.

注意,MethodB有一个主要的技术缺点(提示:在通用代码中).



1> 小智..:

在几乎所有情况下,C++都应该完全能够应对方法A. 我总是使用它,我从来没有遇到过问题.

在我看来,方法B是违反OnceAndOnlyOnce的情况.而且,现在你需要弄清楚你是否正在处理const引用来编写第一次编译的代码.

我想这是一个风格的东西 - 从技术上讲它们都有效,但是MethodA让编译器更加努力.对我来说,这是一件好事.



2> moswald..:

好吧,首先,当'this'指针是const时,必须调用getAsConst - 而不是当你想要接收一个const对象时.因此,除了任何其他问题,它还巧妙地被误解了.(当'this'是非const时,你仍然可以调用它,但这既不在这里也不在那里.)

忽略这一点,getAsConst一无所获,并且使用该接口给开发人员带来了不应有的负担.现在他必须确定他当前是否正在使用const变量,而不是仅仅调用"get"并知道他正在获得他需要的东西,并且他是否正在使用的新对象需要是const.后来,如果两个对象由于某些重构而变为非常量,那么他必须切换出他的呼叫.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有