MST

星途 面试题库

面试题:C++可变参数模板在泛型编程中的基础应用

请编写一个C++函数模板,利用可变参数模板实现对任意数量整数的求和,并解释函数模板中可变参数模板的展开过程。
16.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

// 递归终止模板
template <typename T>
T sum(T value) {
    return value;
}

// 可变参数模板
template <typename T, typename... Args>
T sum(T first, Args... rest) {
    return first + sum(rest...);
}

可变参数模板展开过程解释

  1. 定义递归终止模板
    • template <typename T> T sum(T value)定义了递归终止条件。当参数包Args展开到只剩下最后一个参数时,就会调用这个模板,直接返回这个参数值。
  2. 定义可变参数模板
    • template <typename T, typename... Args> T sum(T first, Args... rest)是主要的可变参数模板。Args...是参数包,它可以包含零个或多个参数。
    • 在函数体中,first + sum(rest...),首先取出第一个参数first,然后递归调用sum函数处理剩余参数包rest。这个过程会一直重复,直到参数包rest为空,此时调用递归终止模板。例如,假设有调用sum(1, 2, 3),第一次调用sum(1, 2, 3)first为1,rest(2, 3),执行1 + sum(2, 3);接着调用sum(2, 3)first为2,rest(3),执行2 + sum(3);最后调用sum(3),返回3,最终结果为1 + (2 + 3) = 6