fre*_*low 13 c++ arrays templates pointers pass-by-reference
我使用以下模板获取指向数组的最后一个元素后面的指针:
template <typename T, size_t n>
T* end_of(T (&array)[n])
{
return array + n;
}
Run Code Online (Sandbox Code Playgroud)
现在我似乎记得这种方法存在一些问题,但我不记得它是什么.我相信它与类型参数或函数参数的选择有关,但我不确定.所以就像进行健全性检查一样,您是否看到上述代码存在任何问题?小用量测试:
int test[] = {11, 19, 5, 17, 7, 3, 13, 2};
std::sort(test, end_of(test));
Run Code Online (Sandbox Code Playgroud)
您的提案未必在编译时进行评估,这取决于优化.以下是在编译时计算的:
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;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理是创建一个char数组类型,它与给定数组的元素数量相同.sizeof总是以字符数返回大小.