#学习自用#
多返回值的处理
如果返回值是同一种类型,那么可以返回vector或者数组,但是C++中不能返两种类型的返回值,在实际情况下,一个函数可能就是需要返回一个字符串和一个浮点型,这时应该如何处理呢。
返回结构体
将函数的返回值设置为一个结构体,结构体成员中添加我们需要返回的几种变量类型。
#include<iostream>
using namespace std;
struct A
{
string str;
float i;
};
A function(string name,float attrib)
{
return {name,attrib};
}
int main()
{
A player1;
player1=function("odd", 1.0);
cout << player1.i << endl;
cout << player1.str << endl;
cin.get();
}
这里要注意返回值不能是结构体指针,因为函数内部创建的变量会在函数结束时销毁,如果用指针去接收,那么player1与player指向同一地址,但是 player.str , player.i 的值就已经失效了。
返回元组
元组是一个类,它可以包含多个变量且不限制类型。
#include<iostream>
#include<tuple>
using namespace std;
tuple<string, float>function(string str,float i)
{
return make_tuple(str, i);
}
int main()
{
auto i= function("odd", 1);
cout << get<0>(i) << endl;//元组的成员访问
cout << get<1>(i) << endl;
cin.get();
}
其实返回元组与返回结构体类似 ,但是对于元组成员的访问并不像结构体成员的访问那样清晰,结构体成员的访问带上了变量名,在篇幅长的代码中能够提示我们变量代表的含义,所以返回元组使用的并不多,这里也仅作一个了解。
引用传参
用引用传入函数的参数,可以达到在函数内部对函数外部变量的修改,这时就可以取消返回值。
#include<iostream>
using namespace std;
void function(string& str, float& i)
{
str = "odd";
i = 1;
}
int main()
{
string str1;
float i = 0;
function(str1, i);
cout << str1 << endl;
cout << i << endl;
cin.get();
}
指针传参
使用指针传参应对多返回值的原理与使用引用传参相同,都是达到函数内部对函数外部变量的修改的效果,从而不需要返回值。