C ++:自动const?

时间:2010-07-10 17:28:00

标签: c++ const-correctness

编译此代码时:

class DecoratedString
{
private:
    std::string m_String;
public:
     // ... constructs, destructors, etc
     std::string& ToString() const
     {
         return m_String;
     }
}

我从g ++中收到以下错误:invalid initialization of reference of type 'std::string&" from expression of type 'const std::string'

为什么m_String被视为const?编译器不应该只是在这里创建引用吗?

编辑:

此外,我该怎么做才能让这个函数充当一个在大多数情况下都可以工作的字符串的转换?我创建了函数const,因为它没有修改内部字符串...也许我只需要让它返回副本......

编辑:好的......让它返回一份副本。

4 个答案:

答案 0 :(得分:9)

m_String被视为const,因为它是作为

访问的
this->m_String

this是const,因为成员函数ToString()是const限定的。

答案 1 :(得分:3)

此时

m_Stringconst,因为您已选择将方法声明为const(这当然会使所有数据实例成员为const, (如果您需要绕过该特定数据成员的那个),您可以选择明确地将其mutable

答案 2 :(得分:1)

因为该方法是const(const中的std::string& ToString() const)。 Const方法将this视为const对象,将其成员视为const个对象。

答案 3 :(得分:1)

因为您通过常量m_String访问this(方法为const)。