ArrayRef 的目的

Purpose of ArrayRef

我偶然发现了这个 http://llvm.org/docs/doxygen/html/classllvm_1_1ArrayRef.html,我正试图了解它的用途。

我看不出 ArrayRef 解决了什么问题,有人可以解释一下这背后的动机吗?

这与 std::string_view 背后的想法相同:提供对某事物的一般看法,而不管理它的生命周期。

ArrayRef的情况下(这是一个糟糕的名字,恕我直言,ArrayView要好得多),它可以查看其他数组类型,包括非对象内置数组(C数组)。例如,您的函数可以如下所示:

size_t sum (ArrayRef<size_t> view){
   return std::accumulate(view.begin(),view.end(),0);
}

并用 C 数组调用它:

size_t arr[] = {1,2,3,4,5,6,7};
auto _sum = sum(arr);

如果您将参数类型更改为 std::vectorArrayRef 仍然有效。

can you not just template an argument and have that accept any different type of array of any length?

重点是您不必指向第一个元素,您可以指向 2 、3 或数组内的任何元素,所以基本上您建议的函数看起来像

template<class Array>
void doSomthing(Array& array , size_t pos, size_t length){/*...*/}

在这种情况下,使用 class 会更好(就像使用 std::string_view 而不是 const char* + size_t 一样)。