【发布时间】:2010-09-14 21:55:28
【问题描述】:
例如,假设我有一个班级:
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 函数中的某些变量,请使用相互属性。
-
...和“成员变量”,我猜。
标签: c++ constants overload-resolution const-reference const-method