Dei*_*Dei 5 c++ templates c++11
我写了一个简单的可变参数模板函数,我试图理解为什么它不起作用.(它的输出对应物工作得很好.)
#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();
}
Run Code Online (Sandbox Code Playgroud)
由于可以从评论中可以看出,我输入1 2 3的a b c和输出我得到的是1 0 0.显而易见,只a保存其价值.有人可以解释为什么会发生这种情况,我该怎么做才能解决它?谢谢!
编辑::是的,显然我有参数包的概念错了!我还试图做以下事情:rest_t... &rest这给了我一个编译器错误.
相反,如果我写rest_t&... rest它按预期工作.我想这只是我身边的语法错误!感谢谁发布了这个作为答案,并在一分钟后删除了他的答案!d:
a 通过引用传递,但其他的被复制:当你以递归方式调用它们时,它们是,通过引用获取,但是它们引用之前通过值传递的变量,因此它不会在外部修改.
template<class curr_t, class... rest_t>
void read(curr_t &var, rest_t&... rest)
// ^
{
std::cin >> var;
read(rest...);
}
Run Code Online (Sandbox Code Playgroud)