无返回值函数

对于返回类型是void的函数,return后不跟表达式。最后的 return; 可以没有而让程序隐式执行。在void函数中的return语句还有提前使函数退出的作用而不进行接下来的计算,如定义一个swap函数在二者相同时不继续运算直接退出:

void swap(int& v1, int& v2){

if (v1==v2) return;

int tmp = v2;

v2 = v1;

v1 = tmp;

//可以不显式添加return

}

有返回值函数

函数不是void类型,则每个void语句都必须返回一个值,且这个值必须与函数返回类型相同或可以隐式转换为函数的返回类型。同样,程序执行到return语句后会提前退出:

int foo(int a){

if (a) return 0;

return 1;

}

int main(){

int b = 2, c = 0;

cout<

}

值如何被返回

返回的方式和初始化一个变量或形参完全一致:返回的值用于初始化调用点的一个临时量,此临时量即函数调用结果。

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

否则当结束运行,函数的占用空间被完全释放,引用或指针不再有效。

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

调用运算符的优先级和点运算符或箭头运算符相同。因此可以使用函数调用的结果直接访问结果对象的成员:

string a(string s1, string s2){return s1+s2;}

int main(){

string sa = "a", sb = "b";

cout<

}

引用返回左值

调用一个返回引用的函数,得到的结果是一个左值。因此可以为返回类型是非常量引用的函数的结果赋值:

//注意函数返回类型为char!

char get_var(string& str, string::size_type index){

return str[index];

}

int main(){

s = "hello";

get_val(s, 0) = 'H';

cout<

}

列表初始化返回值

可以返回花括号包围的值列表给一个临时量。此列表也用来对表示函数返回值的临时量进行初始化。若是空,则默认初始化。否则由函数返回类型决定返回值。

就如果返回的是内置类型,则花括号列表只允许最多一个值且该值所占空间不应大于目标类型的空间。若是类类型则由类本身定义,如vector的列表初始化。

主函数main的返回值

允许main函数没有return语句而直接结束,编译器会隐式地在最后插入 return 0。

递归

无论直接或间接,一个函数调用了自身则称为递归函数。如下列阶乘函数:

int factorial(int val){

if (val) {

cout<

}

//注意val-1不能是val--否则死循环

//若是--val不会报错,但会多减一次,使最终返回值为 0

return 1;

}

返回数组指针

数组不能拷贝,所以不能被返回。

返回数组的指针可用类型别名简化:

typedef int arrT[10];

using arrT = int[10];//与上述等价且易懂

arrT* func(int i); //返回一个指向(含有10个整数的数组的)指针

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

函数形式如下:

type (*function(parameter_list))[dimension]

func(int i):表示调用func时需要int i作为实参

(*func(int i)):表示可以对调用结果进行解引用操作

(*func(int i))[10]:表示解引用func的调用将得到一个大小10的数组

int (*func(int i))[10]:表示数组中元素是int类型。

尾置返回类型trailing return type

任何函数定义都可以使用尾置返回,对于返回类型复杂的函数较为有效,比如返回类型是数组的指针或者数组的一样弄。尾置返回类型跟在形参列表后面以 -> 开头:

auto func(int i) -> int(*)[10]

使用decltype

如果知道函数返回指针指向哪个数组,即可使用decltype声明返回类型。例如下列函数返回的指针根据参数不同而改变:

int odd[] = {1, 3, 5, 7, 9};

int even[] = {2, 4, 6, 8, 0};

decltype(odd) *arrPtr(int i){

return (i%2) ? &odd : &even;

}

int main(){

int i = 3;

cout<

}

attrPtr使用decltype表示其返回类型是个指针,并且该指针所指的对象与odd的类型一致。因为odd是数组,arrPtr返回一个指向含有5个整数数组的指针。注意decltype的结果是个数组,要想表示arrPtr返回指针还必须在函数声明时加一个*符号。

java statement 返回类型,6.3 返回类型和返回语句 | Return type Return statement相关推荐

  1. java上传文件以流方式判断类型

    package com.omg.utils;/*** 文件类型枚取*/ public enum FileType {/*** JEPG.*/JPEG("FFD8FF"),/*** ...

  2. oracle 异常返回值,oracle - java.sql.SQLException:无效的列类型:调用具有行类型返回值的函数时为1111 - 堆栈内存溢出...

    我在一个名为" MyPackage"的Oracle软件包中有一个函数: FUNCTION MyFunction(name IN VARCHAR2) RETURN MyTable%r ...

  3. java使用axis调用.net发布的webservice接口返回对象类型

    本人在java中axis-1.4 调用 .net发布的webService接口 有问题欢迎各路大神讨论 !!! 1.1 基本类型 1.2 对象类型 1.3复杂对象类型(对象类中嵌套对象类) 返回基本类 ...

  4. java object toarray_java从toArray返回Object[]到泛型的类型擦除

    在将ArrayList等Collection转为数组时,函数的返回值并不是泛型类型的数组,而是Object[].刚好最近翻了一遍<java核心技术>,以及参考<Think in Ja ...

  5. java返回给前端的包装类型_Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 **什么是基本数据类型对象包装类呢?**就是把基本数据类型封装成对象,这样就可以提供更多的操作基本数值的功能了. 基本数据类型对象的包装类 ...

  6. java返回给前端的包装类型_第47节:Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 什么是基本数据类型对象包装类呢?就是把基本数据类型封装成对象,这样就可以提供更多的操作基本数值的功能了. 基本数据类型对象的包装类8个: ...

  7. Springboot-Vue-MybatisPlus 返回给前端的 Long类型数据失去精度怎么办 之 Long类型作为实体类的一个属性

    Springboot-Vue-MybatisPlus 返回给前端的 Long类型数据失去精度怎么办? 在将自己的Mybatis的系统转换为Mybatis-Plus的时候,遇到了许多问题. 今天的问题是 ...

  8. 凉,返回值都是Map类型,还能用Swagger生成在线文档吗?

     作者:停止的人间花火 blog.csdn.net/Hpluvalbe/article/details/107102063 问题描述 swagger2没有提供描述返回值的api,导致不能注解map类型 ...

  9. 01_11_Java语言入门||02_面向对象与常用类||day11_final、权限、内部类、成员变量类型和方法的参数及返回值特例

    第一章 final 1.1 final关键字和概念和四种用法 final关键字代表最终,不可改变的 常见四种用法 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部变量 可以用来修饰一个成 ...

最新文章

  1. docker设置国内镜像加速的坑
  2. 将DevExpress.Utils.ImageCollection变量的image导出
  3. python所有软件都打不开机怎么办_电脑软件,小编教你电脑所有软件都打不开怎么解决...
  4. Redis的七种武器及其适合的应用场景
  5. java map的遍历
  6. 中文依存句法分析概述及应用
  7. 微软为“离线”做好准备:推出同步框架
  8. win10激活时间(win10激活时间查询)
  9. 如何在线修改图片大小?图片在线改大小方法推荐给你
  10. java图片文字识别_java初探Tess4j识别图片文字
  11. vbs表白小程序,女生同意才能关掉。
  12. swagger 的介绍和基本使用
  13. i7服务器cpu型号推荐,Intel七款主流CPU,推荐指南(建议收藏)
  14. [A002]微擎新版本今日头条小程序
  15. html什么是插件,什么是jquery插件?
  16. 自动摘要生成(一):最大边界相关算法(MMR)
  17. IOS技术分享| 互动连麦场景实现
  18. Unity读取json大文件卡顿
  19. android blackberry,BlackBerry 10将停止更新,但基于安卓的黑莓BB OS重获新生
  20. ViewUI的Table组件使用摘记

热门文章

  1. 操作系统动态库调用过程
  2. XSHELL下直接下载文件到本地(Windows)
  3. gm怎么刷东西 rust_Rust语言:解引用详述,搞不明白这个概念,趁早放弃Rust
  4. java的string访问某个元素_C#深究.net常用的23种设计模式之访问者模式(Vistor Pattern)...
  5. MATLAB使用技巧
  6. linux菜单系统,Linux修改grub菜单
  7. excel实战应用案例100讲(十)-下载的文件显示“文件已损坏,无法打开”?
  8. java 短路判断_java中和的区别(|和|同理)
  9. c语言中坐标xoy轴在哪里,用C语言在linux下获取鼠标指针的相对位置
  10. JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】