Например, предположим, что у меня есть класс:
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;
};
И где-то еще в коде, у меня есть что-то вроде этого:
Foo *a;
// Do stuff...
std::string name = a->Name(); // <-- chooses the non-const version
Кто-нибудь знает, почему компилятор в этом случае выбирает неконтинентную версию?
Это несколько надуманный пример, но фактическая проблема, которую мы пытаемся решить, периодически автоматически сохраняет объект, если он изменился, и указатель должен быть неконстантным, потому что он может быть изменен в какой-то момент.