0

编译器如何将值 3 传递给非类型参数x

#include <iostream>

template <typename Type, size_t x>
void f(Type (&a)[x])
{
    for (int i = 0; i < x; i++)
    {
        a[i] = i;
        std::cout << a[i] << '\n';
    }
}

int main()
{
    int v[3];
    f(v);
}
4

1 回答 1

0

模板允许类型名和整数类型,例如size_t.

对于整数类型,模板函数使用值(必须在编译时知道)进行初始化,而不是类型。

编译器知道该函数f()需要一个类型的参数,Type (&a)[x]并检查是否有 和 的任何组合Type适用xv您传递的参数。

这个过程称为模板类型推导

于 2013-03-03T00:32:22.047 回答