无返回值的函数
函数返回类型时void
void func()
不要求非得有return语句,因为在这类函数的最后一句会隐式的执行return语句
有返回值的函数
只要函数的返回值类型不是void,就要显式的使用return语句进行返回。 返回一个值的方式和初始化一个变量或者形参的方式完全一致”返回值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。
复杂的返回值类型
返回引用
const char* func(const string& s)
{
return s[0];
}
切记返回引用时,不要返回局部变量的引用,不要返回局部指针的引用。 当函数执行完毕后,局部变量和指针都被释放,引用就会发生错误。
返回值是初始化列表
vector<string> func()
{
return {"H","O"};
}
如果是空列表:则临时量执行初始化,不是空列表,返回的值的类型由函数返回值类型决定
返回数组指针
重命名的方式
using arrT = int[10]
arrT func(int i);
可以使用起别名的方式来进行定义
括号的方式
int (*func(int i)) [10];
func:名称 向右:(int i) 参数表,func是一个接受一个 int 参数的函数 向左:func是一个接受一个 int 参数的函数,返回值是一个指针 向右:指向一个含有10个元素的数组 向左:数组元素的类型是int 所以:func是一个接受一个 int 参数的函数,返回值是一个指向含有10个整型元素的数组指针
尾置返回方式
auto func(int i) -> int(*)[10];
尾置返回值类型在形参列表的后方加上->再跟上要要返回的类型,在原来要写返回类型的位置加上auto,让编译器自己去解析。
使用decltype
int (*p)[10]={};
decltype(p) func(int i);
p的类型是指针,指向int [10],解析其类型,使用decltype,作为函数的返回值类型来定义函数返回值。
返回函数指针
函数不能返回一个函数,但是可以返回一个函数指针
using F = fun(int i);
F *funcp(int i )
auto funcp(int i) -> int (*) (int i);
decltype(F) *funcp(int i);
|