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 объекты тоже.

Другие вопросы по тегам