我对 C++ 如何实例化模板感到困惑。我有一段代码:
template <class T, int arraySize>
void test1(T (&array)[arraySize])
{
cout << typeid(T).name() << endl;
}
template<class T>
void test2(T &array)
{
cout << typeid(T).name() << endl;
}
int main()
{
int abc[5];
test1(abc);
test2(abc);
return 0;
}
这是我的问题:
<强>1。数组 abc 的大小如何传递给 test1(参数 arraySize )?
2. C++编译器如何判断两个模板中T的类型?
最佳答案
- 没有正常意义上的参数传递,因为模板参数是在编译时解析的。
arraySize
和T
都是从array
参数的类型推断出来的。由于您传递了int[5]
,arraySize
和T
变成了5
和int
,分别在编译时。
例如,如果您声明了 int* abc = new int[5];
,您的编译器将在您尝试调用 test1(abc)
时出现故障.除了基本的类型不匹配之外,int*
没有携带足够的信息来推断数组的大小。
关于c++ - C++ 中的模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484340/