编译此代码时:
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,因为它没有修改内部字符串...也许我只需要让它返回副本......
编辑:好的......让它返回一份副本。
答案 0 :(得分:9)
m_String
被视为const,因为它是作为
this->m_String
和this
是const,因为成员函数ToString()
是const限定的。
答案 1 :(得分:3)
m_String
为const
,因为您已选择将方法声明为const
(这当然会使所有数据实例成员为const, (如果您需要绕过该特定数据成员的那个),您可以选择明确地将其mutable
。
答案 2 :(得分:1)
因为该方法是const(const
中的std::string& ToString() const
)。 Const方法将this
视为const
对象,将其成员视为const
个对象。
答案 3 :(得分:1)
因为您通过常量m_String
访问this
(方法为const
)。