【发布时间】:2011-06-13 03:28:26
【问题描述】:
我使用以下模板来获取指向数组最后一个元素之后的指针:
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));
【问题讨论】:
-
由于您必须将数组的大小传递给函数,您真正从中得到了什么,而使用
array模板却无法获得? -
@Zac:我没有,这个函数只有一个参数。模板参数
n是自动推导出来的,你只要说end_of(array)如示例代码所示。 -
在这种情况下,您将遇到的问题是处理动态数组,因为
n将只是单个T的大小。 -
@Zac:不。你不能将指向数组第一个元素的指针传递给模板,因为指针不是数组。
-
这正是我所说的问题:您不能将它与动态分配的数组一起使用。
标签: c++ arrays templates pointers pass-by-reference