2

我正在学习一种用于查找数组中元素数量的技术(这样我就可以开始编写排序算法,而无需将数组的长度作为参数传递给数组),但是在本教程中,这个行显示为模板声明:

template <typename T, size_t N>

老实说,我不知道您可以在一个模板声明中声明多个类型名,但是“size_t N”还有什么作用?这也是模板声明中的变量声明吗?

4

2 回答 2

7

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);

因为两个模板参数都是推导出来的。

于 2012-11-06T20:38:09.767 回答
2

“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

完全有效。

于 2012-11-06T20:40:00.527 回答