Почему возвращаемая строка и из константного метода не компилируются?

Учитывая следующий код:

#include <iostream>
#include <string>
using namespace std;

class A
{
private:
    string m_name;
    string m_first;
public:
    A(): m_first("string") {}
    virtual void print() const {}
    string& getName() const {return m_first;}  // won't compile 
    const string& getLastName() const {return m_name;}  // compile
};


int main()
{
    A a;
    return 0;
}

Компилятор представляет: «недопустимая инициализация ссылки типа 'std :: string &' из выражения введите 'const std :: string' " Почему я не могу вернуть m_first из getName ()? Я думал, что константа в хвосте функции указывает, что функция не изменит "this" ... но я не пытаюсь это изменить, просто верну элемент данных.

5
задан Armen Tsirunyan 29 August 2011 в 13:33
поделиться