Const Functions and Interfaces in C++
c++, const-correctness, interface, member-functions
Solution
I think it's laziness/carelessness. `GetName()` should have no effect on the object's state, and the contract of `IObject` should state that fact explicitly.
If the inheriting class was somehow forced to make `GetName()` have (hidden!) side effects, they could always declare the corresponding fields as `mutable`.
Problem
I'll use the following (trivial) interface as an example: ``` struct IObject { virtual ~IObject() {} virtual std::string GetName() const = 0; virtual void ChangeState() = 0; }; ``` Logic dictates that `GetName` should be a `const` member function while `ChangeState` shouldn't. All code that I've seen so far doesn't follow this logic, though. That is, `GetName` in the example above wouldn't be marked as a `const` member function. Is this laziness/carelessness or is there a legitimate reason for this? What are the major cons of me forcing my clients to implement `const` member functions when they are logically called for? EDIT: Thanks for your responses everyone. I think it's pretty much unanimous: laziness/ignorance is the reason for what I'm seeing.