Функции, которые возвращают ссылку - PullRequest
0 голосов
/ 03 марта 2019

Я понимаю, что это полезно, когда вы хотите использовать функцию на левой стороне оператора присваивания.Также упоминается, что «когда функция возвращает ссылку, она возвращает неявный указатель на свое возвращаемое значение».Однако мое понимание функции с возвращаемым типом ссылки на переменную состоит в том, что возвращаемая переменная является псевдонимом этой переменной.

Из примера в: returning-a-reference-from-a-function-in-c /

class DigInto
{
private:
    int secret;
public:
    DigInto() { secret = 150; }
    int &GetSecretVariable() { return secret; }
    void Write() { cout << secret << endl; }
};

Основная функция выглядит следующим образом:

int main(int argc, char *argv[])
{
    DigInto inst;
    inst.Write();
    int &pry = inst.GetSecretVariable();
    pry = 30;
    inst.Write();
    return 0;
}

Это имеет смысл для меня, поскольку переменная pry теперь является псевдонимом дляinst::secret.Более того, объявление pry, то есть int & совпадает с типом возврата inst::GetSecretVariable().

Мои вопросы:

  1. Почему это говоритон возвращает неявный указатель на свое возвращаемое значение, когда возвращает псевдоним переменной?

  2. Зачем нам нужно возвращать ссылку?Почему мы не можем просто объявить GetSecretVariable как:

    int GetSecretVariable() { return secret; } и установить pry как: int pry = inst.GetSecretVariable();, если мы не планируем изменять значение inst::secret?

...