tuple 与结构化绑定
更新时间:2026-10-01。让“返回多个值”变得类型安全、零样板。
一、用法
cpp
std::tuple<int,std::string,bool> f();
auto [id,name,ok] = f(); // 结构化绑定
std::apply([](auto&&... a){ use(a...); }, t); // 展开为参数包get<0>/get<int>、tie 可把结果解到既有变量,tuple_cat 拼接。
二、何时别用
tuple 成员靠位置记忆,超过两三个就难读,长期接口应定义有名字的 struct;pair 适合纯二元(map 节点),tuple 适合临时/泛型中转。

常见坑
- 绑定到引用要用
auto&/const auto&。 - 重排 tuple 顺序后位置访问全错。
get<T>在类型重复时报歧义。
小结
总结
std::tuple 是类型安全的异类集合,让函数零样板地返回多个值或在泛型中转发一组异参(用 get<I>/get<T> 访问、std::apply 展开成参数包、tuple_cat 拼接),C++17 的结构化绑定 auto [a,b,c] = f() 可直接对 tuple/pair/结构体/数组解包,tie 可解到既有变量;但 tuple 靠位置记忆、超过两三个成员就读性差且重排顺序会全错,所以只适合小而临时的中转,长期接口应定义有名字的 struct,绑定到对象时记得用 auto&/const auto&。