Присвоение ссылки на переменную в C ++

0

Мой вопрос в том, почему можно назначить ссылку на переменную, которая не объявлена как ссылка?

Спасибо.

int &testRef(int &x)
{
    return ++x;
}

int main()
{
    int x = 1, y;
    y = testRef(x); // assigning testRef(x) which is int& to y which is int
    return 0;
}
  • 1
    Это возможно, потому что это имеет смысл. Жизнь была бы очень трудной, если бы нельзя было строить объекты из ссылок. Назначение означает «присвоить значение объекта, на которое ссылается ссылка ( x ), LHS ( y ).
Теги:
reference

3 ответа

4
Лучший ответ

y = testRef(x); возьмет копию значения ссылки, возвращаемой testRef. Это может быть полезно, если вы хотите внести последующие изменения в возвращаемое значение.

Если testRef был возвращать ссылку на const, тогда у вас не было бы выбора, кроме как взять копию значения, если вы хотите изменить возвращаемое значение. Это помогает в достижении стабильности программы.

  • 0
    Почему это так? И где я могу найти больше информации об этом?
1

Вспомните ссылку как псевдоним, просто имя что-то. Вы не назначаете ссылку. Вы назначаете то, что ссылается на имена (точнее, на то, что они ссылаются).

0

При передаче по ссылке фактически ничего нового не создается, создается только псевдоним исходного объекта, который указывает на тот же объект. Буквально параметр "x" в функции() и х, передаваемый изначально, один и тот же.

Кстати

int &testRef(int &x)
{
    return ++x;
}

возвращение по ссылке позволяет назначить rvalue: что-то вроде

int main()
{
    int x = 1, y;
    y = testRef(x); 
     testRef(y) = 5;  //by doing this you are assigning y as 5 
    std::cout<<y;
    return 0;
}
  • 0
    Где я могу прочитать больше об этом?
  • 1
    это действительно очень сложный пример.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню