有人告诉我他们团队中的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
有一个主要的技术缺点(提示:在通用代码中).
在几乎所有情况下,C++都应该完全能够应对方法A. 我总是使用它,我从来没有遇到过问题.
在我看来,方法B是违反OnceAndOnlyOnce的情况.而且,现在你需要弄清楚你是否正在处理const引用来编写第一次编译的代码.
我想这是一个风格的东西 - 从技术上讲它们都有效,但是MethodA让编译器更加努力.对我来说,这是一件好事.
好吧,首先,当'this'指针是const时,必须调用getAsConst - 而不是当你想要接收一个const对象时.因此,除了任何其他问题,它还巧妙地被误解了.(当'this'是非const时,你仍然可以调用它,但这既不在这里也不在那里.)
忽略这一点,getAsConst一无所获,并且使用该接口给开发人员带来了不应有的负担.现在他必须确定他当前是否正在使用const变量,而不是仅仅调用"get"并知道他正在获得他需要的东西,并且他是否正在使用的新对象需要是const.后来,如果两个对象由于某些重构而变为非常量,那么他必须切换出他的呼叫.