Visual Studio中std::mdspan的[]运算符编译失败问题求助
解决Visual Studio中std::mdspan编译错误
问题根源
代码里的ms2[0, 0]写法不符合C++标准:std::mdspan并未重载接受逗号分隔多下标的operator[],这就是Visual Studio抛出C2676错误的原因。
修复方案
有两种标准兼容的写法可以解决该问题:
方案1:使用operator()访问多维度元素
这是C++标准为std::mdspan指定的多下标访问方式,也是最推荐的写法:
std::vector v{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; auto ms2 = std::mdspan(v.data(), 2, 6); ms2(0, 0) = 3; // 替换[]为()
方案2:通过索引序列使用operator[]
如果偏好[]语法,可以将多个下标包装为一个索引序列传入:
std::vector v{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; auto ms2 = std::mdspan(v.data(), 2, 6); ms2[{0, 0}] = 3; // 用初始化列表包裹下标
注意事项
确保你的Visual Studio版本支持C23(至少VS 2022 17.5版本),并且在项目编译选项中开启/std:c++23,因为std::mdspan是C23新增的标准库特性。
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

