热度 9
2016-3-21 22:38
800 次阅读|
0 个评论
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 ; using arrtT = int ; arrT* func(int i); 否则,直接使用指针来返回包含10个元素的函数,需要这么定义: Type (*function(parameter_list)) 上面这条声明的规则,和数组指针/指针数组的区别是一样的。 2. 另外,还可以使用返回类型后置的语法: auto func(int i) - int(*) ; 3. 或者,如果事先知道会返回的数组类型,也使用decltype: int odd = {0, 2, 4, 6, 8}; decltype(odd) *arrPtr(int i) { return (i % 2)? odd : even; } 此处要注意的是,decltype返回的是数组,而不是指针。 如果需要返回指针,则必须在函数前显式的加上*。 这三种方法都能够实现使函数返回复杂的类型,可以挑选其中的任意一种。