函数返回值
- 不要返回局部对象的引用或者指针
- 引用返回左值,其他返回类型得到右值
- main函数返回值中,0表示成功,其他表示识别。
列表初始化返回值
c++ 11新标准规定, 函数可以返回花括号包围的值列表。其实,就是使用列表初始化的方式对表示函数返回的临时变量进行初始化。
vector<string> process()
{
return {"funca", "funcb"};
}
返回数组指针
因为数组不能被拷贝, 所以不能返回数组。 不过函数可以返回数组的指针或引用, 只是返回类型的定义比较繁琐。
int (*func(int i))[10] {} // 表示返回一个大小为10,类型为int型的数组。
如果不想定义这么复杂,可以使用类型别名的方式;
typedef int Array[10]; // Array是一个类型别名
Array* func(int i){}
使用尾置返回类型
同样是c++ 11标准, 任何函数都可以定义尾置返回,只是这种方式更适合用在定义返回类型比较复杂的函数,比如返回类型是数组的指针或引用的。
auto func(int i) -> int(*)[10]
使用decltype
如果你已经知道函数返回的指针指向哪个数组,那么就可以使用decltype,它不会把数组转换为指针
int a = {1, 2, 3};
decltype(a) * func(int i);