固定大小的 std::span vs std::array
Fixed-size std::span vs std::array
C++20 包括std::span
,它"描述了一个对象,该对象可以引用一个连续的物体序列,序列的第一个元素位于位置零"。它的界面非常接近std::array
,尽管它支持动态范围和固定范围。
明显的区别是std::array
拥有它的元素(因此它的析构函数会破坏它们(,而std::span
则没有。
还有什么array
可以用来span
不能的吗?
span
是array
,因为指针指向值。
有什么int
可以比int*
不能使用的吗?
如果您扫描代码库并用int*
替换每个int
,即使您在int*
的每个使用点都添加了*
,您也会拥有一个完全无意义的代码库。 如果您扫描代码库并用std::span
替换每个std::array
,也是如此。
指针和值是不同的东西。 你可以跳过箍,尝试处理指针,就好像它们是它们所指向的东西的价值一样,但试图这样做通常很困难,结果往往是不连贯的。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 为什么 std::span 缺少 cbegin 和 cend 方法?
- std::span<const T> 作为函数模板中的参数
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- std::span constructor, libcxx vs libstdc++, template vs non-
- 固定大小的 std::span vs std::array
- std::span.size() vs array/vector size
- 为什么span的数组和std::array构造函数与其容器构造函数不同
- 为什么STD :: SPAN超载函数调用操作员索引
- 为什么 std::span 是一个指针 + 大小而不是两个迭代器
- 为什么STD :: SPAN缺乏size_type
- gsl::span 无法使用 std::regex 进行编译