Возврат значений из функции

Рейтинг: 0Ответов: 1Опубликовано: 11.01.2015

Скажите, пожалуйста, есть ли какая-то видимая разница в работе 2-х функций?

int & func1(int & b)
{
    return b;
}

int func2(int & b) 
{   
return b; 
}

С объектами классов я разобрался (про создание копий объектов, работу конструкторов копирования и деструкторов).

Как я понял, в func2 при возврате значения будет создаваться временная копия объекта и удаляться. В func1 этого происходить не будет.

Это как-то влияет на работу программы?

Ответы

▲ 3Принят

Немножко побуду Капитаном Очевидность. Из первой функции вы возвращаете ссылку на int, из второй - просто int. С результатом первой функции вы можете работать как со ссылкой (Кэп не даст соврать), в частности, использовать его как lvalue.

Скажем, вы можете сделать так:

int & func1(int & b)
{
    return b;
}

int func2(int & b) 
{   
    return b; 
}

int main() {
    int i = 10;

    // можно инкрементить результат выполнения функции
    // выглядит странновато, однако работает        
    cout << func1(i)++ << endl;     // выведет 10

    // а тут можно увидеть результат предыдущего инкремента
    cout << i << endl; // выведет 11

    return 0;
}