Visual C++ V19 Preview 1中std::mdspan元素访问报错求助
解决std::mdspan多维访问的语法错误
你的问题出在多维元素访问的语法上:C++标准中std::mdspan的多维索引不支持方括号[]加逗号分隔的参数,必须使用圆括号()来传递多个维度的索引。
修正后的代码如下:
std::vector<double> Bdat(dfcts.ndf * vbs.nvb); // allocate the space using Dext = std::dextents<size_t, 2>; std::mdspan<double, Dext> B{ Bdat.data(), dfcts.ndf, vbs.nvb}; // create the mdspan B(0, 0) = 1.0; // 这里把[]改成()
原因说明:
- C++的
operator[]语法本身只允许传入单个参数,逗号在这里会被解释为逗号运算符(先计算0,再计算0,最终只传入第二个0),这显然不是你要的多维索引逻辑。 std::mdspan标准设计中,专门用operator()来支持多维索引,而operator[]仅用于线性访问(传入单个线性偏移值)。
微软V19 Preview 1的mdspan实现符合C++23标准,修正后即可正常使用。
内容的提问来源于stack exchange,提问作者dr_eck
相关产品推荐
相关产品推荐

