You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::get<T&>能否作用于zip_view输出?是否符合C++标准?

问题分析与解答

结论

你的用法完全符合C++标准,理应被编译器支持,MSVC 19.40出现的编译错误属于其标准库实现的缺陷。

原因解释

根据C++标准,std::get<T>(obj)的重载允许通过元素类型从满足tuple-like要求的对象中获取对应元素——只要该对象确实包含一个T类型的元素。

你的代码中,zip视图的输出是一个类元组对象(本质是包含int和char&的tuple类型),其中明确存在char&类型的元素,因此std::get<char&>(t)是标准许可的合法用法。GCC和Clang的正确编译行为也验证了这一点。

MSVC的错误提示显示它错误地尝试在空tuple(std::tuple<>)中查找char&类型的元素,这明显是其标准库在处理zip_view返回的类元组对象与std::get<T>的适配逻辑时出现了bug。

临时解决办法

在MSVC修复该缺陷前,可以改用索引式的std::get来规避问题:

// 用索引1获取zip视图的第二个元素(对应char&类型)
auto bar = std::get<1>(t);

这个写法在所有主流编译器(MSVC、GCC、Clang)中都能正常工作。

内容的提问来源于stack exchange,提问作者ProbabilisticS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:17:13