C++primer学习笔记-----6.3返回类型和return 语句

【return 语句终止当前正在执行的函数并将控制权返回到调用该函数的地方。

return 有两种形式:

return;
return expression;


6.3.1 无返回值函数


没有返回值的return 语句只能用在返回类型是void 的函数中
返回void 的函数不要求非得有return 语句,因为这类函数的最后一句后面会隐式的执行return。】

【一个返回类型是void 的函数也能使用return 语句的第二种形式,不过此时return 语句的expression 必须是另一个返回void 的函数。
强行令void 函数返回其他类型的表达式将产生编译错误。】

6.3.2 有返回值函数


只要函数的返回值不是void,则该函数内的每条return 语句必须返回一个值
允许main 函数没有return 语句直接结束。如果控制到达了main 函数的结尾处而且没有return 语句,编译器将隐式地插入一条返回0 的return 语句。
return 语句返回值的类型必须与函数的返回类型相同,或者能隐式的转换成函数的返回类型。】

【在复杂的控制流中,有可能不经过任何return 语句就结束了函数的执行,而且 编译器常常检查不出此类错误。】

【返回一个值的方式和初始化一个变量或形参的方式完全一样: 返回的值用于初始化调用点的一个临时量(初始化该临时量时,局部对象还未被销毁),该临时量就是函数调用的结果。】

【不要返回局部对象的引用或指针;
但是如果该局部对象是外部对象的引用则可以,总之应该从底层考虑返回值绑定的对象在函数结束之后是否存在。】

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

【main 函数的返回值可以看做是状态指示器,所以main 函数的返回类型也是有意义的。】

【在递归函数中,一定有某条路径是不包含递归调用的;否则函数将“永远”递归下去。】

6.3.3 返回数组指针


【因为数组不能被拷贝,所以函数不能返回数组。不过函数可以返回数组的指针或引用,这种函数的返回类型比较难写, 使用类型别名可以简化这一任务。】

【要想在声明返回数组指针的函数时不使用类型别名,函数应该如此声明:
Type (*function(parameter_list)) [dimension]
int (*func(int i)) [10]

【使用尾置返回类型:
C++11 新标准中还有一种可以简化上述声明的方法,使用尾置返回类型。
任何函数的定义都能使用尾置返回,但是这种形式对于返回类型比较复杂的函数最有效
auto func(int i) -> int(*)[10]
尾置返回类型跟在形参列表后面并以一个-> 符号开头,为了表示函数真正的返回类型跟在形参列表之后,我们在本应该出现返回类型的地方放置一个auto。】

【使用decltype:
还有一种情况,如果我们确定函数返回的指针将指向哪种数组(通常直接使用返回的那个数组),就可以使用decltype 关键字声明返回类型。
int odd[] = {1, 3, 5, 7, 9};
int even[] = {0, 2, 4, 6, 8};

decltype(odd) *arrptr(int i)
{
    return (i % 2) ? &odd : &even;
}
条件运算符在很多情况下可以代替if 条件语句。】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值