C++: автоматический констант?
Когда я компилирую этот код:
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 ответа
m_String
рассматривается как const, потому что к нему обращаются как
this->m_String
а также this
является const, потому что функция-член, ToString()
является квалифицированным.
m_String
является const
в этот момент, потому что вы решили объявить метод как const
(что, конечно, также делает все члены экземпляра данных константными) - если вам нужно обойти это для этого конкретного члена данных, вы можете явно сделать это mutable
,
Потому что вы получаете доступ m_String
через константу this
(метод const
).
Поскольку метод является постоянным (const
в std::string& ToString() const
). Const метод см. this
как const
объект, и его члены как const
объекты тоже.