当您在函数内部调用srand()
时,它是否只在该函数内部播种rand()
?
这里是调用srand()
的函数main
。
int main(){
srand(static_cast<unsigned int>(time(0)));
random_number();
}
void random_number(){
rand();
}
使用rand()
的函数random_number
在调用srand()
的位置之外。
所以我的问题是——如果你用srand()
来播种rand()
,你能在调用srand()
的地方之外使用播种的rand()
吗?包括函数、不同的文件等。
srand
在全球范围内有效,我们可以通过C99标准草案看到这一点,我们可以参考C标准,因为C++在C库函数方面回到了C标准,它说(emphasis mine):
srand函数使用参数作为新的伪随机序列的种子通过后续对rand的调用返回的数字。如果随后使用调用srand相同的种子值,应重复伪随机数序列。如果rand是在对srand进行任何调用之前调用,应生成相同的序列就像第一次使用种子值1调用srand时一样。
它并没有将其影响限制在它使用的范围内,它只是说它影响对rand的后续调用
标准草案中提供的可移植实现的例子更明确地表明,这种影响是全球性的:
static unsigned long int next = 1;
void srand(unsigned int seed)
{
next = seed;
}
否,它适用于全局。它不限于函数,甚至不限于线程。
cplusplus.com有更多信息:http://www.cplusplus.com/reference/cstdlib/srand/