获取指向数组末尾的指针

我使用以下模板来获取指向数组最后一个元素的指针:

template <typename T, size_t n>
T* end_of(T (&array)[n])
{
    return array + n;
}

现在我似乎记得这种方法存在一些问题,但我不记得它是什么。 我相信它与选择类型参数或函数参数有关,但我不确定。 所以,就像一个完整的检查一样,你是否发现上述代码有问题? 小使用测试:

int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));

您的建议不一定在编译时进行评估,它取决于优化。 以下是在编译时计算的:

template <typename T, size_t N> char (&array(T(&)[N]))[N];

int main()
{
  int myArray[10];

  std::cout << sizeof array(myArray) << std::endl;

  return 0;
}

它通过创建一个数组类型的char来工作,它与给定数组的元素数量相同。 sizeof总是返回字符数量的大小。


我看到的唯一问题是,如果你在编译时不知道长度,你的模板将不知道在那里放置什么。 所以你不得不说出test+x或其他东西,现在你有两种不同的方法来做同样的事情。

就个人而言,我宁愿只使用一个vector<int> ,因此已经为我定义了end() 。 如果您需要该阵列,则可以使用&v[0]


你也需要一个const版本。 不过,据我所知,这种方法没有实际问题 - 我通常使用它。

链接地址: http://www.djcxy.com/p/72987.html

上一篇: Obtaining a pointer to the end of an array

下一篇: How are C++ array members handled in copy control functions?