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

Joe*_*ang 6 c++ cpp-core-guidelines

在他的C++核心指南中,Bjarne Stroustrup建议在通过引用传递数组时使用span.为什么不直接传递一个std :: array对象?

Nic*_*las 10

  1. std::array通过价值传递将复制它们.关键gsl::span在于获取它们的函数引用现有的数据数组.

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

  3. gsl::span不关心拥有数组的类型; 它只是一个指针+大小.因此,一个span基于接口可被供给从数据std::vector,QVector以及许多其他类型.一个std::array基于接口要求您使用特定的容器.