我写了一个简单的可变参数模板函数,我试图理解它为什么不起作用。 (它的输出对应物完美无缺。)
#include <iostream>
void read() {}
template<class curr_t, class... rest_t>
void read(curr_t &var, rest_t... rest)
{
std::cin >> var;
read(rest...);
}
int main()
{
int a = 0, b = 0, c = 0;
read(a, b, c); //input: 1 2 3
std::cout << a << b << c; //output: 1 0 0
std::cin.ignore();
std::cin.get();
}
从评论中可以看出,我为1 2 3
输入了a b c
,我得到的输出是1 0 0
。很明显,只有a
才能保存其价值。有人可以解释为什么会发生这种情况,我该怎么做才能解决它?谢谢!
EDIT ::
是的,显然我有参数包的概念错了!
我还试图执行以下操作:rest_t... &rest
这给了我一个编译器错误。
相反,如果我写rest_t&... rest
,它就会按预期工作。我想这只是我身边的语法错误!感谢任何发布此作为答案的人,并在一分钟后删除了他的答案! d:
答案 0 :(得分:5)
a
通过引用传递,但其他的被复制:当你以递归方式调用它们时,它们是,引用,但它们引用之前通过值传递的变量,因此它不会被修改外部
template<class curr_t, class... rest_t>
void read(curr_t &var, rest_t&... rest)
// ^
{
std::cin >> var;
read(rest...);
}