C++之函数返回值

岁酱吖の 提交于 2020-04-06 02:43:52

返回一个值的方式和初始化一个变量或形参的方式完全不同:返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。

  • 返回类型是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;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!