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

167
15 декабря 2016, 16:02

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

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

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

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

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

Answer 1

Немножко побуду Капитаном Очевидность. Из первой функции вы возвращаете ссылку на 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;
}
READ ALSO
Library not loaded

Library not loaded

Уважаемые форумчане!

234
Как скомпилить &ldquo;Hello world&rdquo; в С++ Qt в Linux?

Как скомпилить “Hello world” в С++ Qt в Linux?

Самый простой пример:

163
Строка в u32string. Как выполнить uppercase?

Строка в u32string. Как выполнить uppercase?

Использую строку u32stringКак выполнить преобразование uppercase, то есть маленькие символы преобразовать в большие?

231
QT Creator под windows не находит файл проекта (.pro)

QT Creator под windows не находит файл проекта (.pro)

Что делать, если QT Creator под windows не находит файл проекта (pro) и в лог постройки пишет следующее:

182