返回一个值的方式和初始化一个变量或形参的方式完全不同:返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。
- 返回类型是string
如果函数的返回类型是string,意味着返回值将被拷贝到调用点。因此,函数返回局部变量的副本或者一个未命名的临时string对象都是没问题的。 - 返回类型是引用或指针,但是回的值却是局部对象的引用或指针
这个是不可取的,因为函数周期结束后,局部对象会在函数内被释放掉,引用和指针会指向不再有效的内存区域。 - 返回类型是非常量引用,那么其实可以认为函数调用是个左值;相反,常量引用不可以被当成左值
- 返回类型是列表
C++11新标准规定,函数可以返回花括号包围的值的列表。类似于其他返回结果,此处的列表也用来对表示函数返回的临时量进行初始化。如果列表为空,临时量执行值初始化;否则,返回的值由函数的返回类型决定 - 返回类型是数组指针
因为数组不能被拷贝,所以函数不能返回数组。不过,函数可以返回数组的指针或引用。 - 返回类型是尾置
任何函数的定义都能使用尾置返回,但是这种形式对于返回类型比较复杂的函数最有效。尾置类型一般用auto表示:
auto func(int i) -> int(*)[10];
- 返回类型用decltype修饰
int odd[] = {1, 2, 3, 4, 5};
decltype(odd) *arrayPtr(int i) {
return (i % 2) ? &odd : &even;
}
来源:oschina
链接:https://my.oschina.net/u/3235746/blog/3213804