众所周知,go语言中函数返回多个值很方便,接收函数返回的多个值也很方便,例如:
func f() (string,int){
return "Naruto",18
}
func main(){
name,age := f()
}
而在C++中,首先想到的办法是使用结构体,例如:
struct Person
{
std::string name;
int age;
};
auto f(){
return Person{"Naruto",18};
}
auto person = f();
std::cout<<person.name<<" "<<person.age<<std::endl;
如果不想声明结构体,则可以使用std::tuple,例如:
std::tuple<std::string,int> f(){
return {"Naruto",18};
}
int age;
std::string name;
std::tie(name,age) = f();
std::cout<<name<<" "<<age<<std::endl;
然而要提前声明变量还是很不优雅。C++17引入了结构化绑定,做到了类似go语言的接收返回值方式:
std::tuple<std::string,int> f(){
return {"Naruto",18};
}
auto[name,age] = f();
std::cout<<name<<" "<<age<<std::endl;
现在就变得非常に优雅です