c++函数返回类型和return语句

一、无返回值函数

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版权协议,转载请附上原文出处链接和本声明。