MST

星途 面试题库

面试题:C++函数模板实例化性能的基础考量

在C++中,简述函数模板实例化可能影响性能的两个常见因素,并举例说明如何避免其中一个因素对性能产生负面影响。
45.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 常见影响性能因素
    • 代码膨胀:当函数模板针对不同类型实例化时,会生成多个函数副本,导致可执行文件增大。例如,定义一个简单的函数模板 template <typename T> void add(T a, T b) { return a + b; },如果在程序中分别用 intdouble 等不同类型调用该模板函数,编译器会为每种类型生成一个 add 函数的副本。
    • 不必要的类型转换:在模板函数参数传递和返回值过程中,如果类型不匹配,可能会发生不必要的类型转换,这会消耗额外的性能。比如模板函数 template <typename T> T multiply(T a, T b) { return a * b; },若调用时传入 int 类型和 double 类型,int 类型会被转换为 double 类型进行计算,返回时如果接收变量是 int 类型,又可能发生截断转换。
  2. 避免代码膨胀的方法
    • 显式实例化:在源文件中显式实例化特定类型的模板函数,这样编译器就不会在每个调用点都生成函数副本。例如:
template <typename T> void add(T a, T b) { return a + b; }
// 显式实例化 int 类型的 add 函数
template void add<int>(int a, int b);

在其他源文件中调用 add<int> 时,编译器就不会再次生成 add<int> 的副本,从而避免代码膨胀,减少可执行文件大小。