习题答案请参考:C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案
目录
6.3 返回类型和return语句
return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方。
两种return语句形式:
(1)return;
(2)return expression;
6.3.1 无返回值函数
无返回值函数即函数返回类型为void。
无返回值函数的特性
(1)可以没有return语句,void返回类型函数会自动执行return
(2)如果需要在函数中间提前退出,需要使用return语句退出
如:编写swap函数,使得在交换值相等时直接退出
void swap(int &val1, int &val2)
{
//如果交换值相等,不需要交换,直接退出
if (val1 == val2)
return; //return语句提前结束
//执行交换,无需return语句,会自动退出
int Temp = 0;
Temp = val1;
val1 = val2;
val2 = Temp;
}
6.3.2 有返回值函数
有返回值函数的特性
(1)函数返回类型不是void
(2)必须包含return返回语句,且返回类型必须和函数返回类型相同
小贴士!!!
函数返回值不要返回局部对象的引用或指针,因为随着函数的结束,局部对象也被释放,局部对象的引用或指针将指向不再有效的内存区域(细节,注意!!)
引用返回左值
函数返回引用则得到左值,其他返回类型则得到右值。得到左值如果是非常量就可以对其赋值,但如果是常量引用就不能赋值,如:
# include <string>
# include <vector>
using namespace std;
#include <iostream>
#include <string>
#include <vector>
using namespace std;
char &get_val( string &str, string::size_type ix)
{
return str[ix]; //返回str[ix]的引用
}
int main()
{
string s("a value");
cout << s << endl;
get_val(s, 0) = 'A'; //函数返回左值,并对其赋值
cout << s << endl;
return 0;
}
6.3.3 返回数组指针
声明返回数组指针的函数
声明返回数组指针函数时,数组的维度必不可少,且需要在形参的后面:
Type (*function(parameter list)) [dimension]
具体的例子:
int (*fun(int i)) [10]
按照如下顺解读上述声明含义:
(1)func(int i)表示调用func函数时需要一个int类型的实参
(2)(*func(int i))表示可以对函数调用的结果执行解引用
(3)(*func(int i))[10]表示解引用func的调用将得到一个大小是10的数组
(4)int (*func(int i))[10]表示数组中的元素是int型
使用尾置返回类型
尾置返回类型一般跟在形参列表后面,用->表示(这里不是太明白):
auto func(int i) -> int(*)[10];