c++ - C++ 中的模板实例化

标签 c++ arrays templates

我对 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的类型?

最佳答案

  1. 没有正常意义上的参数传递,因为模板参数是在编译时解析的。
  2. arraySizeT 都是从array 参数的类型推断出来的。由于您传递了 int[5]arraySizeT 变成了 5int,分别在编译时。

例如,如果您声明了 int* abc = new int[5];,您的编译器将在您尝试调用 test1(abc) 时出现故障.除了基本的类型不匹配之外,int* 没有携带足够的信息来推断数组的大小。

关于c++ - C++ 中的模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484340/

相关文章:

c++ - Qt 如何找到小部件实例?

c++ - 在调用点参数处创建的临时对象的生命范围

java - 数组的有效大小与实际大小,如何知道有效大小?

c++ - 不允许函数模板部分特化 'swap<T>'

c++ - 自动模板参数可以传什么有限制吗?

c++ - 模板类的非常量参数

C++ 结构内存布局和 OpenGL glVertexPointer?

c++ - "Proper"错误输入/行为时退出 C/C++ 程序的方法

python - 为什么 'groupby(x, np.isnan)' 的行为与 'groupby(x) if key is nan' 不同?

javascript - Codecademy 上的 JavaScript 控制流编程