函数返回值


  1. 不要返回局部对象的引用或者指针
  2. 引用返回左值,其他返回类型得到右值
  3. 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);