Bootstrap

C++17结构化绑定

众所周知,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;

现在就变得非常に优雅です

;