Someone told me about a C++ style difference in their team. I have my own viewpoint on the subject, but I would be interested by pros and cons coming from everyone.
So, in case you have a class property you want to expose via two getters, one read/write, and the other, readonly (i.e. there is no set method). There are at least two ways of doing it:
class T ; class MethodA { public : const T & get() const ; T & get() ; // etc. } ; class MethodB { public : const T & getAsConst() const ; T & get() ; // etc. } ;
What would be the pros and the cons of each method?
I am interested more by C++ technical/semantic reasons, but style reasons are welcome, too.
Note that MethodB has one major technical drawback (hint: in generic code).
Well, for one thing, getAsConst must be called when the ‘this’ pointer is const — not when you want to receive a const object. So, alongside any other issues, it’s subtly misnamed. (You can still call it when ‘this’ is non-const, but that’s neither here nor there.)
Ignoring that, getAsConst earns you nothing, and puts an undue burden on the developer using the interface. Instead of just calling ‘get’ and knowing he’s getting what he needs, now he has to ascertain whether or not he’s currently using a const variable, and if the new object he’s grabbing needs to be const. And later, if both objects become non-const due to some refactoring, he’s got to switch out his call.