面试题答案
一键面试- 分析问题:
- 当传入不同类型参数导致模板参数推导失败时,编译器会给出错误提示。错误信息通常会指出模板参数推导在哪个位置失败,以及涉及的类型不匹配等关键信息。
- 解决方法:
- 显式指定模板参数:在调用函数时明确指定模板参数类型,这样可以绕过模板参数推导过程。
- 使用类型转换:在传入参数前,将参数转换为相同类型,以便模板参数推导能够成功。
- 代码示例:
#include <iostream>
template <typename T>
void func(T a, T b) {
std::cout << "a + b = " << a + b << std::endl;
}
int main() {
// 错误调用,int和double类型不同,模板参数推导失败
// func(1, 2.5);
// 显式指定模板参数
func<double>(1, 2.5);
// 使用类型转换
double num1 = 1;
double num2 = 2.5;
func(num1, num2);
return 0;
}
在上述代码中,func(1, 2.5);
这样的调用会因为int
和double
类型不同导致模板参数推导失败。通过显式指定模板参数func<double>(1, 2.5);
或者先进行类型转换double num1 = 1;
等方式,可解决该问题。