一、无返回值函数
1.return有两种形式:如果想中途退出可以写return语句(类似break);return后也可以跟表达式,不过必须是另一个返回void的函数
二、有返回值函数
1.返回一个值的方式和初始化一个变量的方式完全一样:返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果
2.和函数参数一样,如果函数返回引用,则该引用仅是他所引对象的一个别名,使用const xxx的引用不会真正拷贝对象
const string& shortString(const string& s1, const string& s2)
{
return s1.size() <= s2.size() ? s1 : s2;
}
//使用
string s1{ "dsa" }, s2{ "sdas" }, min;
min = shorts(s1, s2);
3.注意不能返回局部对象(非参数)的引用或指针,因为函数终止时储存空间被释放,引用不再指向有效的内存空间
const string& shortString(const string& s1)
{
string ss;
return ss;
} //vs上没有红线,但是无法通过编译
4.调用运算符优先级和点运算符(成员访问)相同,都符合左结合律
min = shortString(s1, s2).size();
5.调用一个返回引用的函数将得到左值,其他返回类型得到右值,特别的我们可以为返回类型是非常量引用的函数的结果赋值
findChange(s, 0) = 'A';
6.c++11规定,函数可以返回花括号包围的值的列表
vector<string> findChange()
{
string ss;
//......
return { ss,"asdda" };
}
三、返回数组指针
为了达到以下效果
int a[10]{ 1,5,6,5,1,2,6,7,9,10 };
int(*p)[10] = &a;
1.使用类型别名
typedef int arr[10];
//using arr = int[10]; 同上
arr* fun()
{
int a[10]{ 1,5,6,5,1,2,6,7,9,10 };
return &a;
}
void solve()
{
int(*p)[10] = fun();
}
2.声明一个返回数组指针的函数,数组的大小必须跟在函数名字之后
int (*fun())[10]
3.使用尾置返回类型,其实任何函数定义都可以用尾置返回,但是对于返回类型比较复杂的函数最有效,比如返回数组的指针或数组的引用
auto fun()->int(*)[10]
4.使用decltype
int a[10];
decltype(a)* fun()
版权声明:本文为qq_62751626原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。