【发布时间】:2017-01-06 19:11:38
【问题描述】:
在他的C++ Core Guidelines 中,Bjarne Stroustrup 建议在通过引用传递数组时使用 span。为什么不只传递一个 std::array 对象?
【问题讨论】:
-
可能是为了简单和避免模板中的代码膨胀,您需要使用它来接受任何大小
std::array。 -
核心指南并非由 Stroustrup 独家拥有。
在他的C++ Core Guidelines 中,Bjarne Stroustrup 建议在通过引用传递数组时使用 span。为什么不只传递一个 std::array 对象?
【问题讨论】:
std::array。
按值传递std::array 将复制它们。 gsl::span 的重点在于,获取它们的函数正在引用现有的数据数组。
gsl::span 能够获取运行时定义大小的数组。 std::array 在编译时固定。
gsl::span 不关心数组拥有什么类型;它只是一个指针+大小。因此,基于span 的接口可以从std::vector、QVector 和许多其他类型中获取数据。基于std::array 的界面要求您使用该特定容器。
【讨论】:
spans 的函数只能作用于连续的值数组。
span 对象是自包含的,有两个迭代器会留下问题,它们是否相关以及如何相关。