固定大小std::span结构化绑定无法使用,是否符合C++标准?
固定大小std::span的结构化绑定是否符合C++标准?
你的代码目前不符合任何已发布的C标准(C11到C++23),因此编译器会拒绝编译。
为什么当前标准不支持?
结构化绑定的生效需要目标类型满足以下条件之一:
- 是聚合类型
- 提供了
std::tuple_size、std::tuple_element特化,以及对应的get函数
而标准库中的std::span(包括固定大小的版本),在C++23及之前的版本里并没有实现这些支持,所以无法直接用结构化绑定拆解固定大小span的元素。
关于P1024提案的说明
你提到的P1024《std::span可用性增强》确实明确将“为固定大小span添加结构化绑定支持”作为核心改进点之一,且该提案已被C标准委员会采纳,会纳入**C26标准**。这意味着等C++26正式发布后,你的这段代码就能符合标准并正常编译运行了。
临时替代方案
如果需要在当前标准下实现类似效果,可以手动通过下标访问:
auto _ = std::vector{1,2,3}; std::span<int, 3> a = std::span(_).first<3>(); auto b = a[0], c = a[1], d = a[2];
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

