c++ - 传递 span<T> 和 std::array 作为参数有什么区别?

标签 c++ cpp-core-guidelines

在他的C++ Core Guidelines , Bjarne Stroustrup 建议在按引用传递数组时使用 span。为什么不只传递一个 std::array 对象?

最佳答案

  1. 按值传递 std::array 将是复制它们。 gsl::span 的要点是采用它们的函数引用现有的数据数组。

  2. gsl::span 能够获取运行时定义大小的数组。 std::array 在编译时固定。

  3. gsl::span 不关心什么类型拥有数组;它只是一个指针+大小。因此,基于 span 的接口(interface)可以从 std::vectorQVector 和许多其他类型中获取数据。基于 std::array 的接口(interface)要求您使用该特定容器。

关于c++ - 传递 span<T> 和 std::array 作为参数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512690/

相关文章:

c++ - 为每个测试用例或整个测试套件调用谷歌测试函数 setup() 和 teardown()

c++ - 无法通过可变参数函数将函数指针传递给父类中的方法——编译器错误?

c++ - 在 C++ 中动态加载类值

c++ - Winsock 应用程序中的线性航位推算

c++ - 具有多种类型的递归模板函数

c++ - gsl::cstring_span 不支持 constexpr 吗?如果没有,我为什么要使用它?

c++ - 如何处理来自核心准则检查器的有关gsl::at的静态分析警告?

c++ - 为什么我不能构造一个带有大括号括起来的初始化列表的 gsl::span