可变参数模板运算符

Variadic templates operator

有人可以解释一下这些说法吗? 这些运算符(例如:、+ ...)在这里做什么?

1:参数总和

template <typename... Args>
int function(Args... args)
{
    return (args + ...);
}

2:逗号运算符

template <typename... Args>
int function(Args... args)
{
    ((std::cout << args),...);
}

3:一般情况

template <typename... Args>
int function(Args... args)
{
    otherfunction(args...);
}

我知道哪种情况会产生什么样的结果,但我实际上想知道它是如何工作的。 提前致谢❤️

  1. (args + ...) 扩展为 (args#0 + args#1 + args#2 + .....args#n)
  2. ((std::cout << args),...) 扩展为 (((std::cout << args#0),std::cout << args#1) std::cout << args#n)
  3. otherfunction(args...) args 是扩展参数,如 (args#0, args#1,...)