天天看点

c++ 函数的返回值

函数返回值

  1. 不要返回局部对象的引用或者指针
  2. 引用返回左值,其他返回类型得到右值
  3. main函数返回值中,0表示成功,其他表示识别。

列表初始化返回值

c++ 11新标准规定, 函数可以返回花括号包围的值列表。其实,就是使用列表初始化的方式对表示函数返回的临时变量进行初始化。

vector<string> process()
{
    return {"funca", "funcb"};
}
           

返回数组指针

因为数组不能被拷贝, 所以不能返回数组。 不过函数可以返回数组的指针或引用, 只是返回类型的定义比较繁琐。

int  (*func(int i))[] {} // 表示返回一个大小为,类型为int型的数组。
           

如果不想定义这么复杂,可以使用类型别名的方式;

typedef int Array[]; // Array是一个类型别名

Array* func(int i){}
           

使用尾置返回类型

同样是c++ 11标准, 任何函数都可以定义尾置返回,只是这种方式更适合用在定义返回类型比较复杂的函数,比如返回类型是数组的指针或引用的。

使用decltype

如果你已经知道函数返回的指针指向哪个数组,那么就可以使用decltype,它不会把数组转换为指针

int a = {, , };
decltype(a) * func(int i);