Возврат Значения

Из функции, которая не описана как void, можно (и должно) возвращать значение. Возвращаемое значение задается оператором return. Например:

int fac(int n) {return (n>1)? n*fac(n-1): 1; }

В функции может быть больше одного оператора return:

int fac(int n) { if (n > 1) return n*fac(n-1); else return 1; }

Как и семантика передачи параметров, семантика возврата функцией значения идентична семантике инициализации. Возвращаемое значение рассматривается как инициализатор переменной возвращаемого типа. Тип возвращаемого выражения проверяется на согласованность с возвращаемым типом и выполняются все стандартные и определенные пользователем преобразования типов. Например:

double f() { //... return 1; // неявно преобразуется к double(1) }

Каждый раз, когда вызывается функция, создается новая копия ее параметров и автоматических переменных. После возврата из функции память используется заново, поэтому возвращать указатель на локальную переменную неразумно. Содержание указываемого места изменится непредсказуемо:

int* f() { int local = 1; //... return &local; // так не делайте }

Эта ошибка менее обычна, чем эквивалентная ошибка при использовании ссылок:

int& f() { int local = 1; //... return local; // так не делайте }

К счастью, о таких возвращаемых значениях предупреждает компилятор. Вот другой пример:

int& f() { return 1;} // так не делайте

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: