固定尺寸 std::span 与 std::array

Fixed-size std::span vs std::array

C++20 包括 std::span, which "describes an object that can refer to a contiguous sequence of objects with the first element of the sequence at position zero"。它的界面非常接近 std::array,尽管它支持动态范围和固定范围。

明显的区别是 std::array 拥有它的元素(因此它的析构函数销毁它们)而 std::span 没有。

还有什么 array 可以用于 span 不能的吗?

span 指向 array,因为指针指向值。

有什么可以用 int 而不是 int* 不能用的吗?

如果您清理代码库并将每个 int 替换为 int*,那么即使您在每个点都添加了 *,您也会得到一个完全无意义的代码库- 使用 int*。如果您清理代码库并将每个 std::array 替换为 std::span,情况也是如此。

指针和值是不同的东西。您可以跳过箍并尝试处理指针,就好像它们是它们所指向的事物的值一样,但尝试这样做通常很困难,而且结果通常是不连贯的。