返回类型和return语句

  • return语句中之当前正在执行的函数,并将控制权返回到调用该函数的地方

无返回值函数

  • 没有返回值的return语句只能用在返回类型是void的函数中,返回void的函数不要求非得有return语句,因为这类函数最后一句后面会吟诗执行return
  • void函数可以使用return语句提前退出函数

有返回值函数

  • return语句返回值类型必须与函数哦返回类型相同,或者可以隐式转换成函数返回值类型
  • 在含有return语句哦循环后面应该也有一条return语句,如果没有的话,该程序就是错误的
值是如何被返回的
  • 返回一个值的阿飞那个是和初始化一个变量或形参的方式一样:返回值用于初始化调用点的一个临时量,该临时量就是函数调用的结果
  • 函数返回局部变量时的初始化
string make_plural(size ctr,constr string &word){
    return(ctr>1)?word+ending:eord;
}
  • 该函数返回类型是string,意味着返回值将被拷贝到调用点。该函数将返回word的一个副本或者一个未命名的临时变量string对象,该对象内容是word和ending的和
  • 如果函数返回引用,则该引用仅仅是它所引对象的一个别名,如果形参和返回类型都是const string 的引用,不管调用函数还是返回结果都不会真正拷贝string对象
const string &shorterString(const string &s2, const string &s2){
    return s1.size() <= s2.size()? s1:s2;
}
不要返回局部对象的引用或指针
  • 函数完成后它所占用的存储空间也随之被释放掉了。因此函数终止意味着局部变量的引用将不在指有效的内存区域
返回类类型的函数和调用运算符
  • 调用运算符也有优先级和结合律
引用返回左值
  • 函数的返回类型据决定函数调用是否是左值
  • 调用一个返回引用的函数得到左值,其他返回类型得到右值
主函数main的返回值
  • 我们允许main函数没有return语句直接结束,如果控制到达了main函数的结尾处而没有return语句,编译器将隐式插入一条返回0的return语句
  • main函数返回值可以看成状态指示器,返回0代表执行成功,其他值代表失败,非0值具体含义根据机器而定。
递归
  • 如果一个函数调用了自身,称该函数为递归函数
  • 递归函数中必须有某条路径是不包含递归调用的
返回数组指针
  • 数组不能被拷贝,函数不能返回数组
  • 函数可以返回数组的指针或引用
  • 定义别名的方式返回
typedef int arrT[10];
using arrT = int[10];
arrT* func(int i);
声明一个返回数组指针的函数
  • 在声明func时不使用类型别名,我们必须了哦及被定义名字后面数组的维度
int arr[10];//arr是一个含有10个整型的数组
int *p1[10];//p1是一个含有是个指针的数组,指针指向整型
int (*p2)[10] = &arr; //p2是一个指针,指向含有10个整数的始祖
  • 和上面声明一样,如果想定义一个返回数组指针的函数,则数组的维度必须跟在函数名字之后。
  • 函数形参列表也跟在函数名字后面且形参列表应该先于数组的维度
  • 返回数组指针的函数形式如下:
Type (*function ( parameter_list ) ) [dimension]
使用尾置返回类型
  • 尾置返回类型跟在形参列表后面并以一个->符号开头
  • 在本应该出现返回类型的地方放置一个auto
auto func(int i) -> int(*)[10];
使用decltype
  • 如果我们知道函数返回的指针将指向那个数组,可以使用decltyor关键字声明返回类型
int odd[] = {1,3,5,7,9};
int even[] = {2,4,6,8};
decltype(odd) *arrPtr(int){
    return (i%2)? &odd:&even;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值