C++Primer学习笔记12.13

165 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

6.3 返回类型和return语句

return语句有两种形式:return; return expression;

6.3.2 有返回值函数

在含有return语句的循环后面应该也有一条return语句,如果没有的话该程序就是错误的。

值是如何被返回的:返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果

string f(); 返回一个副本或者一个未命名的string对象 拷贝

const string &f(); 返回const string的引用,不管是调用函数还是返回结果都不会真正拷贝string对象 不拷贝

不要返回局部对象的引用或指针

函数一旦完成,它所占用的储存空间也就随即释放,那么局部变量的引用以及局部对象的指针也就不存在。

引用返回左值 调用一个返回引用的函数得到左值,其他返回类型得到右值

列表初始化返回值 C++11新标准规定,函数可以返回花括号包围的值的列表

6.3.3 返回数组指针

定义一个返回数组的指针或引用的函数比较繁琐,但是有一些方法可以简化这一任务,其中最直接的方法是使用类型别名

typedef int arrT[10]; //arrT是一个类型别名,它表示的类型是含有10个整数的数组
using arrT = int[10]; //上述的等价声明
arrT* func(int i);    //func返回一个指向含有10个整数的数组的指针int arr[10];          //
int *p1[10];          //p1是一个含有10个指针的数组
int (*p1)[10] = &arr; //p2是一个指针,指向含有10个整数的数组  (同类型别名)int (*func(int i))[10];//同上

使用尾置返回类型

C++11新标准 任何函数定义都能使用尾置返回,但是这种形式对于返回类型比较复杂的函数最有效,比如返回类型是数组的指针或数组的引用

为了表示函数真正的返回类型跟在形参列表之后,我们在本应该出现返回类型的地方放置一个auto

auto func(int i) -> int(*) [10] 真正的返回类型int(*) [10]

使用decltype(返回操作数的具体类型)

int odd[] = {1,2,3,4};
decltype(odd) *arrPtr(int i){ }
//decltype并不负责把数组类型转换成对应的指针,所以decltype的结果是数组,另外要再加一个*