遇到有时候写函数需要返回多个值的情况。
C++17之前,只能事先定义一个结构体, 然后返回这个结构体类型就可以了。
但是如果你的这个结构体类型只在这个这里用一次呢。
你还要抠脑壳想一个合适的结构体名字,麻烦!
std::tuple
C++11引入了一个新的类模板叫std::tuple,
是一个容器, 可以存储多个不同类型的值。
#include <iostream>
#include <string>
#include <tuple>
// 只需填类型, 不用像定义结构体那样需要命名成员变量
// BTW, 这种两个成员的其实也可以用std::pair, 但是不具备一般性
// 如果哪天要增加成员, 还得改变类型成tuple
// 直接写tuple, 一劳永逸, 可变性也要好些, 方便改动
std::tuple<std::string, int> CreatePerson()
{
return { "小岛秀夫赛高", 56 };
}
int main()
{
auto person = CreatePerson();
// 通过工具函数get访问uple各元素, 下标 0 代表tuple得第一个元素, 依次得到对应元素.
std::string &name = std::get<0>(person);
int age = std::get<1>(person);
std::cout << name << " " << age << "\n";
}
但是,这样做华而不实 —— 虽然不用事先定义结构体了,看似简洁了。
但是啊,这个get函数长得也太奇怪了,直白点就是好丑啊,0 1 2这种下标看着就够恶心的了。
先用tie改进一下
std::tuple<std::string, int> CreatePerson()
{
return { "小岛秀夫赛高", 56 };
}
int main()
{
std::string name;
int age;
// 依次绑定tuple中的元素到对应变量, 给get 0 1 2 3 说拜拜了
std::tie(name, age) = CreatePerson();
std::cout << name << " " << age << "\n";
}
的确比之前简洁许多了。
但是啊,还是要用三行代码啊。
我之前用结构体类型的变量person,通过 '.' 成员访问运算符访问比这个使用起来简洁多了。
结构化绑定
std::tuple<std::string, int> CreatePerson()
{
return { "小岛秀夫赛高", 56 };
}
int main()
{
// 不用多说了把 形如这样auto然后方括号里面依次写对应的变量名
// 自行体会其中的妙处 嘿嘿嘿
auto[name, age] = CreatePerson();
std::cout << name << " " << age << "\n";
}
这个时候它的作用就体现出来了, 就是为了满足让你能把代码写的足够简洁的需求的!
最后
如果多个返回值的组合是经常到处被用到, 可能还是结构体好些哈, 别学了新的就忘了旧的, 为了新而新就不好了
标签:std,name,17,tuple,int,Structured,C++,CreatePerson,get From: https://www.cnblogs.com/AbendEssen29/p/18103703