概述
c++17标准之后才可以使用结构体绑定。
我们之前有介绍我们可以采用多种方式返回多数据 -- 具体可以参考函数返回多类型1. 使用结构体(优选) -- 可以顾名思义的使用属性,以及可以实现返回多类型数据
2. 使用tuple -- 可以实现多类型数据,但是返回的值不顾名思义,可以查看tuple的用法
3. 使用vector,array等多个数据的容器,但是只能返回一种类型
4. pair只可以返回两种类型的数据
在c++17提出结构体绑定的时候,我们返回多个数据的时候优先是使用结构体的,具体原因可以查看函数返回多类型
但是有了c+17的结构体绑定,使用tuple是在获取其对应的值是也可以做到顾名思义,而且代码更加的清爽。
举例子: 使用结构体返回一个人的姓名和年龄
struct People {std::string name;int age;
};People getpeople() {return { "学习",15 };
}int main(void) {People p;p = getpeople();return 0;
}
再看我们使用结构体绑定之后的代码:
std::tuple<std::string, int> createPeople() {return { "学习",15 };
}int main(void) {auto[name, age] = createPeople();return 0;
}
auto[变量名],就是结构体绑定的语法,其就是根据返回值的结构推算出你指定的对应变量名的类型,然后赋予其对应的值,我们这里直接使用一行代码就可以,
有了结构体绑定之后,tuple用于返回值的时候变得更加好用,而且代码更加的清爽。当然这里使用pair也可以。而且相比结构体所写的代码要少。
std::tuple<std::string, int> Peo{ "学习",2 };
auto[name, age] = Peo;也可以这样使用
切换到c++17标准,如果编译器支持vs中可以右击项目->属性->C/C++->语言->C++语言标准->设置为c++17就可以。