没有返回值的函数:
没有返回值的return语句只能用在返回类型是 void 的函数中,且这类函数会在最后一句后面隐式的执行return(不要求非得写return)
返回值是void的函数也可以返回一个表达式,此时这个表达式必须是另一个返回void的函数(不明白为什么要这么做,先当作语法记)
有返回值的函数:
列表初始化返回值:(个人以为目的就是避免在函数内创建一个无用的变量占用空间)return的表达式类型必须与函数的返回类型相同,或者能隐式的转换成函数的返回类型。
在含有return语句的循环后面也应该有一条return语句(因为如果编译时在循环内return,编译器发现不了循环外没有return语句)
函数返回时发生了什么?
用返回值初始化了一个调用点的临时量。(临时量的类型就是返回类型)
因此不要返回局部对象的引用或指针(因为局部变量在函数结束时就会被销毁,所以如果我们返回了一个局部变量的引用(指针),结果将是未定义的)
如果函数返回的是一个引用,则调用此函数会得到左值。(可以给调用结果赋值)
如果列表为空,临时量执行值初始化(默认初始化),否则返回的值由函数的返回类型决定。
如果函数返回的是内置类型,则花括号包围的列表多包含一个值,而且该值所占的空间不应该大于目标类型的空间,如果函数返回的是类类型,由类本身定义初始值如何使用。(就是匹配构造函数)
主函数main的返回值:
返回数组指针问题:main函数的返回值可以看做是状态指示器,返回0表示执行成功,返回其他值表示执行失败,其中非0值的含义依机器而定。
为了使返回值与机器无关,cstdlib头文件定义了两个预处理变量:EXIT_FAILIURE 、 EXIT_SUCCESS。
返回类型的书写形式: 数组元素类型(*函数名(参数列表))[数组维度]
两种返回类型书写方式:
尾置返回类型:
书写形式: auto 函数名(参数列表)->返回类型。
使用decltype:(搞明白decltype返回的是什么)decltype() 函数名(参数列表)