C++ 23总结


mdspan

理论上支持任意维度,但实际上最高只支持 32 维(通常由实现限制)

// mdspan 是 C++ 23 的新特性
// 以下的代码简单演示了其用法,但是没有测试
// 2025/05 几乎没有编译器可以成功编译(即使是标榜自己支持C++ 23的编译器)
// Mac 的 g++ 可以找到mdspan的头文件,但是没有实现"()"操作符(不完整的实现)
 
#include <mdspan>
#include <iostream>
#include <vector>
#include <cstdint>
 
int main() {
    std::vector<int32_t> data(10); // 原始数据
 
    for (int i = 0; i < 10; ++i)
        data[i] = i;
 
    // 指定 view 的维度和尺寸,可以使用动态占位符(std::dynamic_extent)
    // 使用非固定长度的话,需要在构造函数中传递参数指明长度
    std::mdspan<int32_t, std::extents<size_t, 2, 5>, std::layout_right> span(
        data.data()
    );
 
    for (int i = 0; i < span.extent(0); ++i) {
        for (int j = 0; i < span.extent(1); ++j) {
            std::cout << span(i, j) << " ";
        }
        std::cout << std::endl;
    }
}