1、无返回值的函数

只有返回类型是 void 的函数。

可以不使用 return 语句,会隐式地执行。若想在中间位置提前退出,可以使用 return 语句。可以使用 return 语句返回另一个返回 void 类型的函数。

2、有返回值的函数

在含有 return 语句的循环后面应该也有一条 return 语句。

(1)值是如何被返回的:

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

(2)不要返回局部对象的引用或指针:

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

想要确保返回值安全,我们不妨提问:引用所引的是在函数之前存在的哪一个对象。

(3)调用运算符的优先级与点运算符和箭头运算符相同,如果函数返回指针、引用或类的对象,可以使用函数调用的结果访问结果对象的成员。

(4)调用一个返回引用的函数得到左值,其他返回类型得到右值。

(5)函数可以返回花括号包围的值的列表,用来对表示函数返回的临时量进行初始化。

(6)主函数 main 的返回值:

允许没有 return 语句直接结束,编译器将隐式地插入一条返回 0 的 return 语句。

main 函数的返回值可以看作是状态指示器,返回 0 表示执行成功,返回其他值表示执行失败,其中非零值的具体含义依机器而定。可以使用 cstdlib 头文件中定义的两个预处理变量,EXIT_FAILURE 和 EXIT_SUCCESS 分别表示成功和失败。

(7)函数可以调用自身,成为递归函数。在递归函数中,一定有某条路径是不包含递归调用的,否则函数将不断地调用它自身知道程序栈空间耗尽为止。

3、返回数组指针:

因为数组不能被拷贝,所以函数不能返回数组,但可以返回数组的指针或引用。

int (*func(int i) [10] // 声明一个返回指向大小为 10 的整型数组指针的函数

1

1

简化的方式有三种:

(1)使用类型别名

(2)使用尾置返回类型

(3)使用 decltype,注意 decltype 不负责将数组类型转换成指针类型。