第二节 · 安全部门 · 异常处理库

C++11 的可变参数模板和 C++17 的折叠表达式让函数能够接受任意数量的参数。


C 风格可变参数

#include <cstdarg>

// 旧的方式,不类型安全
double average(int count, ...)
{
    va_list args;
    va_start(args, count);
    
    double sum = 0;
    for (int i = 0; i < count; ++i)
    {
        sum += va_arg(args, double);
    }
    
    va_end(args);
    return sum / count;
}

int main()
{
    cout << average(3, 1.0, 2.0, 3.0) << endl;  // 2
    return 0;
}

可变参数模板


sizeof... 运算符


折叠表达式(C++17)


带初始值的折叠


可变参数构造


emplace 系列函数


转发所有参数


类型安全的 printf


元组辅助


习题

  • 实现一个 min 函数,接受任意数量的参数并返回最小值。

  • 使用折叠表达式实现字符串拼接函数。

  • 实现类型安全的 printf 替代品。

Last updated