Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет90/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   86   87   88   89   90   91   92   93   ...   256
4.6.4 Возвращаемое значение 
Если функция не описана как void, она должна возвращать значение. Например: 
int f() { } // ошибка 
void g() { } // нормально 
Возвращаемое значение указывается в операторе 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; 

Подобно передаче параметров, операция возвращения значения функции эквивалентна 
инициализации. Считается, что оператор return инициализирует переменную, имеющую тип 
возвращаемого значения. Тип выражения в операторе return сверяется с типом функции, и 
производятся все стандартные и пользовательские преобразования типа. Например: 
double f() 

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

При каждом вызове функции создается новая копия ее формальных параметров и автоматических 
переменных. Занятая ими память после выхода из функции будет снова использоваться, поэтому 
неразумно возвращать указатель на локальную переменную. Содержимое памяти, на которую настроен 
такой указатель, может измениться непредсказуемым образом: 
int* f() 

int local = 1; 
// 
... 
return &local; // 
ошибка 

Эта ошибка не столь типична, как сходная ошибка, когда тип функции - ссылка
int& f() 

int local = 1; 
// 
... 


Бьерн Страуструп.
Язык программирования С++ 
 
110 
return local; // 
ошибка 

К счастью, транслятор предупреждает о том, что возвращается ссылка на локальную переменную. Вот 
другой пример: 
int& f() { return 1; } // 
ошибка 


Достарыңызбен бөлісу:
1   ...   86   87   88   89   90   91   92   93   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет