我发现了以下案件的不同产出 案例1
....
rand();
cout<<a[rand()%4];
....
案例2
....
//rand();
cout<<a[rand()%4];
......
没有srand()答案应该是相同的,但它会变得不同。
答案 0 :(得分:2)
来自http://en.cppreference.com/w/cpp/numeric/random/rand
std :: srand()播种rand()使用的伪随机数生成器。如果在对srand()的任何调用之前使用rand(),则rand()的行为就像是用srand(1)播种一样。 每次使用srand()播种rand()时,它必须在连续调用时生成相同的值序列。标准库中的其他函数可以调用rand,它是实现定义的函数。 它是实现定义的rand()是否是线程安全的。
这意味着rand()在srand中使用相同的种子生成相同的数字序列。我认为是这种情况,但是一次调用rand()会使用seed = 1播种它,然后在后续调用中不将种子设置为1。因此它会产生不同的结果。验证这一点的方法是再次使用1显式播种。
答案 1 :(得分:1)
每次拨打rand
都会给你一个新的伪随机数。调用srand
只会更改您将获得的伪随机数字序列。