c++ - 这个变量参数符号是如何工作的?

标签 c++ arguments variadic-functions

在 C++ 中,我可以定义一个具有可变数量参数的函数,如下所示:

void a(int a...) {
    std::cout << a << std::endl;
}

然后这样调用它:

a(100, 200, 300);

但是,显然我只能访问第一个参数:调用的输出是 100

如何使用此表示法访问其他参数?

最佳答案

你的语法是......不幸的是,它指的是 C 风格的可变参数函数。

在 C++11 中,您应该更喜欢 variardic template。最简单的方法是这样的:

首先,一些辅助代码:

#include <utility>
template<typename Lambda>
void for_each_arg( Lambda&& unused ) {}

template<typename Lambda, typename Arg1, typename... Args>
void for_each_arg( Lambda&& closure, Arg1&& arg1, Args&&... args ) {
  closure( std::forward<Arg1>(arg1) );
  for_each_arg( std::forward<Lambda>(closure), std::forward<Args>(args)... );
}

现在,我们使用它:

#include <iostream>
template<typename... Args>
void foo( Args&&... args ) {
  for_each_arg( [](int x){
    std::cout << x << "\n";
  }, std::forward<Args>(args)... );
}
int main() {
  foo( 1, 2, 3 );
}

我们可以访问每个参数,并确保它们转换为 int。请注意,到 int 的转换被推迟到调用 for_each_arg 的主体。

关于c++ - 这个变量参数符号是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913155/

相关文章:

matlab - matlab中的全局变量和参数,哪个最快?

python - **(双星/星号)和*(星/星号)对参数有何作用?

c++ - 使用 C++11 与 GCC 4.8 默认会导致私有(private)继承和提升的链接错误

python - 从命令行获取字符串参数?

c++ - Ubuntu 将可执行文件识别为共享库,并且不会通过单击来运行它

r - 您能让 R 函数在求值时查看其自身形式的值吗?

java - 如何使用参数数组调用 "vararg"方法?

scala - 带有可变参数的 scala 中的构造函数

c++ - 如何从层序遍历构造完整树

c++ - 流缓冲区之间的 block 级数据复制