たとえば、次のクラスがあるとします。
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
この場合、コンパイラが非 const バージョンを選択する理由を知っている人はいますか?
これはやや不自然な例ですが、解決しようとしている実際の問題は、オブジェクトが変更された場合にオブジェクトを定期的に自動保存することであり、ポインターはある時点で変更される可能性があるため、非 const でなければなりません。