面试题答案
一键面试- 问题:
- 当调用
func(1, 2.5)
时,第一个参数1
的类型是int
,第二个参数2.5
的类型是double
。由于函数模板func
要求两个参数类型相同(template <typename T> void func(T a, T b)
),这里编译器无法确定类型参数T
到底是int
还是double
,会产生类型不匹配的编译错误。
- 当调用
- 解决方法:
- 显式指定类型:
在调用函数时,通过#include <iostream> template <typename T> void func(T a, T b) { std::cout << "a + b = " << a + b << std::endl; } int main() { func<double>(1, 2.5); return 0; }
func<double>(1, 2.5)
显式指定类型参数T
为double
,这样第一个参数1
会隐式转换为double
类型,从而使函数调用成功。 - 修改函数模板:
将函数模板修改为接受两个不同类型的参数#include <iostream> template <typename T1, typename T2> void func(T1 a, T2 b) { std::cout << "a + b = " << static_cast<double>(a)+static_cast<double>(b) << std::endl; } int main() { func(1, 2.5); return 0; }
T1
和T2
,并在函数体中进行合适的类型转换(这里转换为double
类型进行计算),这样就可以处理不同类型参数的情况,调用func(1, 2.5)
也能成功。
- 显式指定类型: