例如,假设我有一个类:
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
有谁知道为什么编译器会在这种情况下选择非常量版本?
这是一个有点做作的例子,但我们试图解决的实际问题是定期自动保存一个对象,如果它已经改变,并且指针必须是非常量的,因为它可能会在某个时候改变。