获取指向数组末尾的指针
我使用以下模板来获取指向数组最后一个元素的指针:
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?