无返回值函数
可以使用return在函数中途返回,与break的功能相似

不要返回局部变量的引用或者指针
函数执行完成就会销毁,局部变量的引用或者指针会失效
尤其注意,返回字面值也是错误的,函数实际上会创建一个临时变量存储字面值并返回,这是错误的
要想保证安全,要时刻确保返回函数之前已经存在的某个对象

调用运算符
调用运算符的优先级与点运算符和箭头运算符相同,所以可以使用函数调用的结果访问结果对象的成员

引用返回左值
函数调用返回类型是引用时,返回的是左值,可以进行赋值

列表初始化返回值
在11新标准下,可以通过返回容器等类型进行返回一系列值
返回的值要用花括号,如果花括号内没有值,就会执行值初始化

main的返回值
C++预处理变量定义了两个表示返回成功和失败,不能用在using和std::上(因为是预处理变量)
EXIT_FAILURE和EXIT_SUCCESS

递归
如果一个函数调用了他自身,不论直接间接,都说是递归调用
main函数不能递归

返回数组指针
数组无法被拷贝,自然函数也不能返回数组,不过可以返回指针或者引用
为了简化代码,可以使用typedef函数或者using声明建立别名
typedef int arr[10];
using arr = int[10];
arr * func(int i);
如果不使用别名,函数的形式如下:
int (*func(int val))[10];

使用尾置返回类型
在11标准中,对于较为复杂的返回类型,可以前面用auto,后面尾置返回类型
auto func(int i)->int(*)[10];

使用decltype
int odd[];
int add[];
decltype(odd) *func(int i)
{
    
}
用decltype表示返回odd的类型,不过decltype不会把数组转成指针,所以还要用一个*声明