参考包通过引用传递

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 3a b c和输出我得到的是1 0 0.显而易见,只a保存其价值.有人可以解释为什么会发生这种情况,我该怎么做才能解决它?谢谢!

编辑::是的,显然我有参数包的概念错了!我还试图做以下事情:rest_t... &rest这给了我一个编译器错误.

相反,如果我写rest_t&... rest它按预期工作.我想这只是我身边的语法错误!感谢谁发布了这个作为答案,并在一分钟后删除了他的答案!d:

edm*_*dmz 5

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)