分享

返回类型和return语句

 just4peterpan 2018-05-19
2015年09月14日 15:08:14
阅读数:2949
  • 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;
}
  • 1
  • 2
  • 3
  • 该函数返回类型是string,意味着返回值将被拷贝到调用点。该函数将返回word的一个副本或者一个未命名的临时变量string对象,该对象内容是word和ending的和
  • 如果函数返回引用,则该引用仅仅是它所引对象的一个别名,如果形参和返回类型都是const string 的引用,不管调用函数还是返回结果都不会真正拷贝string对象
const string &shorterString(const string &s2, const string &s2){
    return s1.size() <= s2.size()? s1:s2;
}
  • 1
  • 2
  • 3

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

  • 函数完成后它所占用的存储空间也随之被释放掉了。因此函数终止意味着局部变量的引用将不在指有效的内存区域

返回类类型的函数和调用运算符

  • 调用运算符也有优先级和结合律

引用返回左值

  • 函数的返回类型据决定函数调用是否是左值
  • 调用一个返回引用的函数得到左值,其他返回类型得到右值

主函数main的返回值

  • 我们允许main函数没有return语句直接结束,如果控制到达了main函数的结尾处而没有return语句,编译器将隐式插入一条返回0的return语句
  • main函数返回值可以看成状态指示器,返回0代表执行成功,其他值代表失败,非0值具体含义根据机器而定。

递归

  • 如果一个函数调用了自身,称该函数为递归函数
  • 递归函数中必须有某条路径是不包含递归调用的

返回数组指针

  • 数组不能被拷贝,函数不能返回数组
  • 函数可以返回数组的指针或引用
  • 定义别名的方式返回
typedef int arrT[10];
using arrT = int[10];
arrT* func(int i);
  • 1
  • 2
  • 3

声明一个返回数组指针的函数

  • 在声明func时不使用类型别名,我们必须了哦及被定义名字后面数组的维度
int arr[10];//arr是一个含有10个整型的数组
int *p1[10];//p1是一个含有是个指针的数组,指针指向整型
int (*p2)[10] = &arr; //p2是一个指针,指向含有10个整数的始祖
  • 1
  • 2
  • 3
  • 和上面声明一样,如果想定义一个返回数组指针的函数,则数组的维度必须跟在函数名字之后。
  • 函数形参列表也跟在函数名字后面且形参列表应该先于数组的维度
  • 返回数组指针的函数形式如下:
Type (*function ( parameter_list ) ) [dimension]
  • 1

使用尾置返回类型

  • 尾置返回类型跟在形参列表后面并以一个->符号开头
  • 在本应该出现返回类型的地方放置一个auto
auto func(int i) -> int(*)[10];
  • 1

使用decltype

  • 如果我们知道函数返回的指针将指向那个数组,可以使用decltyor关键字声明返回类型
int odd[] = {1,3,5,7,9};
int even[] = {2,4,6,8};
decltype(odd) *arrPtr(int){
    return (i%2)? &odd:&even;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多