原创 【博客大赛】《C++ Primer》学习笔记(十八)函数的返回值

2016-3-21 22:38 795 9 9 分类: MCU/ 嵌入式 文集: Qt和Cpp
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返回的是数组,而不是指针。
如果需要返回指针,则必须在函数前显式的加上*。

这三种方法都能够实现使函数返回复杂的类型,可以挑选其中的任意一种。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条