MST
星途 面试题库

面试题:C++函数模板类型参数的基础特性应用

请编写一个C++函数模板,该模板接受两个不同类型的参数,并返回它们中较大的那个值。在函数模板中,要体现类型参数的自动推导特性,并且要求处理基本数据类型(如int、double)以及自定义类类型。同时,简要说明类型参数在函数模板定义和使用过程中的作用。
15.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

// 函数模板定义
template<typename T, typename U>
auto maxValue(T a, U b) {
    return (a > b)? a : b;
}

// 自定义类示例
class MyClass {
public:
    int value;
    MyClass(int val) : value(val) {}
    bool operator>(const MyClass& other) const {
        return value > other.value;
    }
};

可以通过以下方式调用:

int main() {
    // 基本数据类型调用
    int intResult = maxValue(5, 3);
    double doubleResult = maxValue(5.5, 3.3);

    // 自定义类类型调用
    MyClass obj1(10);
    MyClass obj2(20);
    MyClass classResult = maxValue(obj1, obj2);

    std::cout << "Int max: " << intResult << std::endl;
    std::cout << "Double max: " << doubleResult << std::endl;
    std::cout << "MyClass max: " << classResult.value << std::endl;

    return 0;
}

类型参数在函数模板定义和使用过程中的作用

  1. 定义过程:在函数模板定义 template<typename T, typename U> 中,TU 是类型参数。它们代表了函数模板可以接受的不同数据类型。通过使用这些类型参数,函数模板能够编写通用的代码,而不需要针对每种具体的数据类型重复编写代码。例如在 maxValue 函数中,ab 的类型分别由 TU 表示,函数体中的逻辑不依赖于具体的类型,只要 TU 类型支持 > 运算符,函数就能正确工作。
  2. 使用过程:在调用函数模板时,如 maxValue(5, 3),编译器会根据传入的实际参数类型自动推导类型参数 TU 的具体类型。这里编译器会自动推导 TintUint。对于自定义类类型,只要类定义了 > 运算符,也能正确推导类型参数并使用函数模板,如 maxValue(obj1, obj2),编译器会推导 TU 都为 MyClass。这种类型参数的自动推导特性极大地增强了函数模板的灵活性和易用性,使得代码可以适用于多种不同类型而无需显式指定类型。