Почему следующая программа работает нормально? Я возвращаю ссылку на локальную переменную из функции

0

Я сбив с толку, как работает следующая программа. Я возвращаю ссылку на локальную переменную из функции, а ссылке присваивается значение более одного раза. Я бы ожидал, что компилятор выкинет ошибку для задания ссылки.

#include <iostream>
using namespace std;

int& getNum()
{
    int myNum = 89;
    return myNum;
}

int& getAnotherNum()
{
    int myNum = 1000;
    return myNum;
}

int main()
{
    int& Value1 = getAnotherNum();   
    cout << "Value1 value is: " << Value1 << endl;

    Value1 = getNum();     
    cout << "Value1 value is: " << Value1 << endl;

return 0;
}
  • 7
    Это просто неопределенное поведение .
  • 0
    Это работает, потому что тебе повезло.
Показать ещё 5 комментариев
Теги:
function
reference

1 ответ

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

Это неопределенное поведение. Согласно п. 1.3.24 неопределенное поведение описывается как:

поведение, для которого настоящий международный стандарт не предъявляет никаких требований

Вопреки распространенному мнению, это не означает, что он всегда будет вызывать ошибку. Стандарт просто не предъявляет никаких требований.


Почему он разрешил "Value1 = getNum();". Значение1 является ссылкой, уже присвоенной чему-то.

Потому что в:

Value1 = getNum();

вы не переназначаете ссылку. Вы вызываете operator= на int который копировали значение возвращаемого значения getNum на Value1.

  • 0
    Почему это позволило "Value1 = getNum ();". Значение1 - это ссылка, уже назначенная чему-либо.
  • 0
    @polapts, см. редактировать.

Ещё вопросы

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