For example, suppose I have a class:
class Foo { public: std::string& Name() { m_maybe_modified = true; return m_name; } const std::string& Name() const { return m_name; } protected: std::string m_name; bool m_maybe_modified; };
And somewhere else in the code, I have something like this:
Foo *a; // Do stuff... std::string name = a->Name(); // <-- chooses the non-const version
Does anyone know why the compiler would choose the non-const version in this case?
This is a somewhat contrived example, but the actual problem we are trying to solve is periodically auto-saving an object if it has changed, and the pointer must be non-const because it might be changed at some point.
Two answers spring to mind:
The non-const version is a closer match.
If it called the const overload for the non-const case, then under what circumstances would it ever call the non-const overload?
You can get it to use the other overload by casting
ato aconst Foo *.Edit: From C++ Annotations