原创
【博客大赛】《C++ Primer》学习笔记(十八)函数的返回值
return关键字用来表示函数在此处返回。
如果return没有跟随值,则表示函数的返回类型为void。
此类函数也可以不使用return,这表示函数执行到末尾隐式的return了。
如果返回的是类型,则返回的是此类型的值的副本;
如果返回的是引用,则返回的是此对象本身。
不要返回本地变量的引用或者指针。
如果函数返回的是引用,则返回类型为lvalues,否则为rvalues。
如果函数返回的是lvalues,就可以对它进行赋值。
函数可以返回list。
----------------
从main函数返回
非void返回的main函数,可以不返回任何值,此时它默认返回0。
cstdlib头文件,定义了预处理变量:
EXIT_FAILURE
EXIT_SUCCESS
int main()
{
return EXIT_SUCCESS;
}
----------------
递归函数
递归函数会造成栈溢出,main函数不能递归调用main函数。
----------------
返回指向数组的指针
返回指向数组的指针或者对数组的引用,都是非常危险的行为。
1. 好在可以使用类型别名来简化这样的声明:
typedef int arrT[10];
using arrtT = int[10];
arrT* func(int i);
否则,直接使用指针来返回包含10个元素的函数,需要这么定义:
Type (*function(parameter_list))[dimension]
上面这条声明的规则,和数组指针/指针数组的区别是一样的。
2. 另外,还可以使用返回类型后置的语法:
auto func(int i) -> int(*)[10];
3. 或者,如果事先知道会返回的数组类型,也使用decltype:
int odd[] = {1, 3, 5, 7, 9};
int even[] = {0, 2, 4, 6, 8};
decltype(odd) *arrPtr(int i)
{
return (i % 2)? &odd : &even;
}
此处要注意的是,decltype返回的是数组,而不是指针。
如果需要返回指针,则必须在函数前显式的加上*。
这三种方法都能够实现使函数返回复杂的类型,可以挑选其中的任意一种。
文章评论(0条评论)
登录后参与讨论