c++函数的返回类型

1.程序利用return返回值

return的返回值类型必须与函数的返回值类型相同。不过需要注意的是我们很有

可能忘掉return,看下面的代码。

#include<iostream>
using namespace std;

int pr(int a, int b)//判断两数是否相等
{
	if (a == b)//注意这里少了另外一个条件的return,而编译器不会帮你找出错误
		return 1;
}
void main()
{

	cout << pr(1, 2);

	system("pause");
}

2.只是如何被返回的

返回一个值的方式和初始化一个变量的方式完全一样,返回的值用于初始化调用点‘

的一个临时量。看下面的代码

#include<iostream>
using namespace std;
int pr(int a)
{
	return a;
}
const int pr1(int a)
{
	return a;
}

void main()
{
	int b = pr(5);//返回类型为int,相当于把a的值返回给b,初始化
	int c = pr1(5);//顶层const,可以
	system("pause");
}

下面看看返回引用的函数

#include<iostream>
using namespace std;
int& pr()
{
	int b = 15;//最好不要这样做因为这样返回的是一个局部变量的引用
	return b;
}
int *pr1()
{
	int a = 10;
	cout << &a << endl;
	return &a;//返回局部变量的地址
}
void main()
{
	int b = pr();//这里返回的是局部变量的值,因为这里是当右值使用的
	int *p = pr1();
	cout << *p << endl;
	cout << *p << endl;//这里将产生未定义的值
	cout << b << endl;


	system("pause");
}

3.引用返回左值

这里对左值的理解是左值用的是变量的内存,而右值用的是变量的值.

看下面的代码

#include<iostream>
using namespace std;
int &pr(int &a)
{
	return a;//返回a,这里相当于返回b
}
const int &pr1(int &a)
{
	return a;//注意这里,返回的是常量引用,所以不能赋值。
}

void main()
{
	int b;
	pr(b) = 10;
	pr1(b) = 15;
	cout << b << endl;
	system("pause");
}

4.列表初始化返回值

c++11规定,函数可以在花括号中返回包围的值的列表,来作为其他返回结果。

#include<iostream>
#include<vector>
#include<string>
using namespace std;

vector<string> My_error(int a,int b)
{
	if (a == b)
		return{ "a", "=", "b" };
	else
		return{ "a", "!=", "b" };
}
void main()
{
	vector<string> a = My_error(1, 2);//这里利用函数返回值进行初始化,显然可以
	for (auto b : a)
	{
		cout << b << " ";
	}

	system("pause");
}

5.主函数main的返回值

main函数如果没有return语句结束,那么编译器将会隐式的插入一条返回0的return语句

main函数的返回值可以看作是状态指示器,返回0代表执行成功,返回其他值,表示失败,其中非0

值返回于机器有关,我们可以使用cstdlib中的两个预处理变量。

看下面的代码

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
	if (1)
		return EXIT_SUCCESS;
	else
		return EXIT_FAILURE;
	system("pause");
}

6.返回数组指针

typedef int arr[10];
arr* pr()//返回一个数组指针,注意我们无法返回数组
{
}
int(*fun(int i))[10];//同样返回一个数组指针
auto fun1()->int(*)[10];//使用尾置返回类型
int a[10];
decltype(a)*fun2();//利用decltype来做到返回数组指针

 


版权声明:本文为qq_43702629原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。