sizeof... 运算符‌如大家所了解的sizeof... 运算符‌是C11 引入的一个‌一元运算符‌专门用于‌在模板参数包template parameter pack中获取参数的个数‌。它与普通的 sizeof 运算符不同后者用于获取类型或对象的内存字节数而 sizeof... 用于‌计算参数包中包含的参数数量‌。基于上一个例子我们必须得为终止条件专门写一个独立的终止函数。这在很多时候都是比较麻烦的那有没有什么方式能够避免呢sizeof...sizeof相比大家都熟悉可以用于获取对象大小。而sizeof...不是获取变参的总大小而是获取变参的数量多少。if constexprif constexpr可以通过在编译期间确定表达式的条件真值确定实际需要执行的代码块。将这两一结合我们可以获得如下代码#include iostream template typename Num, typename... Args int getSum(Num num, Args... args) { // 当形参包的长度为0时直接返回num if constexpr (0 sizeof...(Args)) { return num; } else { return num getSum(args...); } } int main() { int sum getSum(1, 2, 3); std::cout sum std::endl; }这样就把一个目标功能都集中在了一个函数体中与我们通常书写递归函数的写法非常类似。但这份代码也存在着缺点那就是无法应对空参的情况。