函数的返回值
(1)返回值是引用类型
调用一个返回引用的函数得到的是左值,其他类型返回的是右值,如果返回的是引用,那么在实际工程中最好是函数的引用型传入参数
(2)返回值是指针类型
如果函数返回的是指针,并且是函数体中的局部变量,那么要求该指针指向的是堆内存中的一块空间,即该局部指针所指向的内存空间是由new或malloc开辟的
注意:更准确地说,只有位于堆中的内存块作为函数的指针返回值是被允许的
//在堆内存中开辟的局部变量是被允许的
Worker * createWorker()
{
Worker *ptrWorker = new Worker("zhangsan");
return ptrWorker;
}
//在非堆内存中开辟的局部变量不被允许
Worker * createWorker()
{
Worker wk("lisi");
return &wk; //这种指针类型的返回是不被允许的
}
(3)返回值类型是初始化列表
所谓初始化列表initializer_list本质是一个元素序列的包装器,而不是容器。
常用于初始化序列数据,也可作为函数的参数(在不知道有多少数据时),同样也可作为函数的返回值
std::initializer_list<int> get_list()
{
return {1976, 1978, 1998, 2008, 2015, 2020, 2024, 2026};
}
(4)返回值由关键字decltype推断给出
关键字decltype用于在编译时推导表达式的类型
int a[] = {1,3,5};
int b[] = {2,4,6};
decltype(a) *getArrPtr(int i)
{
return (i % 2 ==0) ? &a : &b;
}
(5)尾至返回值类型
是 C++11 标准中引入的新特性。它允许将函数的返回类型放在形参列表之后,使用->符号来指定
主要作用是方便复杂函数的声明和定义,使代码更加清晰易读。特别是在函数返回类型比较复杂,或者需要结合decltype来推导返回类型的情况下,尾置返回类型非常有用
================================================================================
若读者对C++感兴趣,欢迎阅读笔者在学习C++过程中的关于其知识点的总结系列,入口如下:
C++知识点总结全系列文章索引:
【C++知识点总结全系列 (01)】:数据类型、数据类型转换和变量
【C++知识点总结全系列 (02)】:C++中的语句、运算符和表达式详细总结
【C++知识点总结全系列 (03)】:函数(函数参数传递、可变参数、函数返回值等详细介绍)
【C++知识点总结全系列 (04)】:C++类的详细总结与分析
【C++知识点总结全系列 (05)】:IO 类的详细总结和分析
【C++知识点总结全系列 (06)】:STL六大组件总结- 配置器、容器、迭代器、适配器、算法和仿函数
【C++知识点总结全系列 (07)】:模板与泛型编程详细总结与分析
【C++知识点总结全系列 (08)】:面向对象编程OOP