C++Primer 6.3节——返回类型和return语句

C++Primer 6.3节——返回类型和return语句

一、return语句
1、return语句的两种形式
①return;
②return expression; //return的这种形式提供了函数的结果。

③没有返回值的return语句只适用于返回类型是void的函数。但返回void的函数不一定要有return语句。
④return语句将控制权从被调函数转移到主函数,并返回某个值。
⑤一个返回是void的函数也可以使用第②种形式的return语句,但return的expression必须是另一个返回是void的函数。

二、有返回值的函数
1、函数的返回值和返回类型
①返回类型不是void的函数必须返回一个值。
②return语句返回值的类型必须与函数的返回类型,或者能隐形地转换成函数的返回类型。
③在有含有return语句的后面必须有一条return语句,如果没有的话,该程序是错误的。

2、函数返回值的方式
①返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。

3、返回局部变量时的初始化规则
①当返回的是局部变量时,函数返回的值实际上是该局部变量的副本。
②如果不想拷贝返回的值,可以定义函数的返回类型是引用或指针类型。
③、不要返回局部对象的引用或指针,因为随着函数的结束,在函数定义的引用或指针也随之被销毁。字符串字面值会转换成一个局部临时string对象。

三、返回类类型的函数调用运算符
1、调用运算符的优先级与点运算符和箭头运算符相同。
2、调用运算符符合左结合律。
3、若函数返回的是类的对象或指针或引用,我们可以使用函数调用的结果和点运算符来访问结果对象的成员。

四、引用返回左值
1、函数的返回类型决定函数调用是否是左值。
①当函数的返回类型是非常量引用类型时,函数的结果是左值,其他返回类型得到右值。
②如果返回类型是常量引用类型时,我们不能给函数结果赋值。

五、列表初始化返回值
1、函数可以返回花括号包围的值的列表。如
return{“i",“am”,“a”,“good”,“man”};
①当函数返回的是内置类型时,则花括号包围的列表最多包含一个值,而且该值所占空间不应该大于目标类型的空间。
②当函数返回的是类类型,由类本身定义初始值如何使用。
③如果列表为空,临时量执行值初始化;否则,返回的值由函数的返回类型决定。

六、主函数main的返回值
1、允许main函数没有return语句直接结束,编译器自动插入一条return 0的语句。
2、main函数若返回0表示执行成功,返回其他值表示执行失败。
3、cstdlib头文件定义了两个预处理变量。
①return EXIT_FALLURE; //表示执行失败
②return EXIT_SUCCESS; //表示执行成功
4、预处理变量不需要在前面std::,也不需要使用using声明就能直接使用。

七、递归函数
1、如果一个函数调用了它自身,不管是直接调用还是间接调用,都称该函数为递归函数。
2、在递归函数中,一定有一条路径不包含递归调用的。

八、返回数组指针
1、函数不能返回数组,但是可以返回数组的指针或引用。

2、声明返回数组的指针或引用的方式
①使用类型别名
(1)typedef int arr[10]; //arr是一个含有10个整型元素的数组的类型别名
(2)using brr=int[10]; //跟①等价
(3)定义的形式 :arr *fun(int,int);

②直接定义
(1)type (*function(paramenter_list)) [dimension];
(2)如:int(*fun(int,int))[10];

③使用尾置返回类型
(1)形式:auto fun(int i)-> int(*)[10];

④使用decltype
(1)使用的条件:已知函数的指针指向哪个数组。
(2)例如:
int odd[2]={1,2};
decltype[odd] *fun(int i);
(3)注意:decltype并不会把数组或函数转换为指针,所以decltype的结果是数组或函数。

你可能感兴趣的:(c++)