我正在学习一种用于查找数组中元素数量的技术(这样我就可以开始编写排序算法,而不需要将数组的长度作为参数传递,但是在教程中,此行显示为模板声明:
template <typename T, size_t N>
老实说,我不知道你可以在一个模板声明中声明多个类型名称,但是“size_t N”的作用是什么?这是一个模板声明中的变量声明吗?
答案 0 :(得分:6)
size_t
是一种类似于unsigned int
的类型。在模板参数中使用它只意味着您传递size_t
,而不是类型。 N
可能表示数组的大小,这是一个无符号值。例如:
template<typename T, size_t N>
void zeroArray(T (&arr)[N]) { //arr is a reference to an array
std::fill(arr, arr + N, 0); //of N elements of type T
}
int main() {
int arr[3];
zeroArray<int, 3>(arr);
}
在这个例子中,我可以说:
zeroArray(arr);
因为推断出两个模板参数。
答案 1 :(得分:1)
“size_t N”有什么作用?这是一个模板声明中的变量声明吗?
是的,基本上。
模板参数可以是整数类型的类型或值。他们也可以做其他一些事情(参见[C++11: 14.3.2/1]
),我不会称之为“变量”本身,但......
无论如何,这些值也可以像类型一样推断,所以:
template <typename T, size_t N>
size_t array_size(const T (&)[N])
{
return N;
}
int main()
{
int x[5];
char y[10];
std::string z[20];
std::cout << array_size(x) << ',' << array_size(y) << ',' << array_size(z) << '\n';
}
输出:5,10,20
。
完全有效。