为什么 C++11 随机生成器使用引用或非引用参数有不同的列表?

Why does the C++11 random generator use reference or non-reference parameter has different list?

谁能解释一下为什么函数foo1returns的值一样?

#include<iostream>
#include<random>
#include<ctime>

using namespace std;

int foo(default_random_engine& random, uniform_int_distribution<unsigned int>& dis1){
    return dis1(random);
}

int foo1(default_random_engine random, uniform_int_distribution<unsigned int> dis1){
    return dis1(random);
}

int main()
{
    default_random_engine engine(static_cast<unsigned int>(time(0)));
    uniform_int_distribution<unsigned int> randomInt(1, 10);

    cout << "Way1:\n";
    for(int i = 0; i < 10; ++i)
        cout<<foo(engine, randomInt)<<' ';
    cout<<endl;
    cout << "Way2:\n";
    for(int i = 0; i < 10; ++i)
        cout<<foo1(engine, randomInt)<<' ';
    cout<<endl;
    return 0;
}

结果是:

Way1:
9 2 5 5 7 7 9 9 6 6
Way2:
7 7 7 7 7 7 7 7 7 7

foo1() 通过值 获取其参数 ,因此每次 foo1() 都会制作 副本 叫。它在每次调用时生成相同的数字,因为它每次都使用相同的生成器状态(即相同的种子),对 copies 所做的任何更新都不会反映回调用者的原始状态对象。

foo() 不是这种情况,它通过引用获取其参数,因此可以通过 foo() 更新被引用的调用者对象.