固定尺寸 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
,情况也是如此。
指针和值是不同的东西。您可以跳过箍并尝试处理指针,就好像它们是它们所指向的事物的值一样,但尝试这样做通常很困难,而且结果通常是不连贯的。
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
,情况也是如此。
指针和值是不同的东西。您可以跳过箍并尝试处理指针,就好像它们是它们所指向的事物的值一样,但尝试这样做通常很困难,而且结果通常是不连贯的。