c++不定参数
C++中的不定参数是指函数可以接受可变数量的参数。在C++中,可以使用三种方法来实现不定参数:
-
使用C++11中的变长参数模板(Variadic templates)。
-
使用C语言中的va_list、va_start、va_arg和va_end宏。
-
使用STL中的可变参数模板(Variadic templates)。
下面以第一种方法为例进行说明:
使用C++11中的变长参数模板
变长参数模板是C++11中的新特性,可以在函数模板中使用可变数量的参数。在函数模板中,可以使用递归展开来访问可变数量的参数。
示例代码如下:
#include <iostream>
// 模板函数
template<typename T>
void print(const T& t) // 递归结束条件
{
std::cout << t << std::endl;
}
template<typename T, typename... Args>
void print(const T& t, const Args&... args) // 递归展开
{
std::cout << t << " ";
print(args...);
}
int main()
{
print(1, 2.0, "hello", 'a');
return 0;
}
输出结果为:
1 2 hello a
在上面的代码中,我们定义了一个print函数模板,它可以接受任意数量的参数。在print函数模板的第一个版本中,只有一个参数,这个版本被用作递归结束条件。在第二个版本中,有两个参数:第一个参数是当前需要打印的值,第二个参数是剩余的参数。在第二个版本中,我们先打印当前的值,然后递归调用print函数模板,继续打印剩余的参数。
使用变长参数模板时,需要注意以下几点:
-
在函数模板中,必须有一个递归结束条件,否则会编译错误。
-
变长参数模板必须放在参数列表的最后面。
-
可变数量的参数可以是任意类型。
-
可变数量的参数可以被递归展开,以便访问每个参数。
-
可变数量的参数可以通过逗号分隔的方式传递,也可以使用initializer_list传递。
原文地址: https://www.cveoy.top/t/topic/3Ci 著作权归作者所有。请勿转载和采集!