当您在函数中调用srand()时,它是否只在该函数中启动rand()?
下面是函数main,其中调用了srand()。
int main(){
srand(static_cast<unsigned int>(time(0)));
random_number();
}
void random_number(){
rand();
}使用rand()的函数rand()位于调用srand()的位置之外。
所以我的问题是--如果你用rand()通过srand()种子,你能在srand()被调用的外部使用种子rand()吗?包括功能,不同的文件等。
发布于 2014-09-25 19:23:50
srand在全球范围内是有效的,我们可以通过起草C99标准看到这一点,我们可以引用C标准,因为C++回到了C库函数的C标准,它说(强调我的):
srand函数使用参数作为新的伪随机数序列的种子,这些伪随机数将通过随后对rand的调用返回。如果使用相同的种子值调用srand,则应重复伪随机数序列。如果在对srand进行任何调用之前调用rand,则应生成与首次调用srand时相同的序列,其种子值为1。
它并不将其效果限制在它所使用的范围内,它只是说它会影响随后对rand的调用。
标准草案中提供的可移植实现的例子更加明确地表明,其影响是全球性的:
static unsigned long int next = 1;
void srand(unsigned int seed)
{
next = seed;
}发布于 2014-09-25 19:16:19
不,它适用于全球。它不仅限于函数,甚至不限于线程。
cplusplus.com有更多信息:http://www.cplusplus.com/reference/cstdlib/srand/
https://stackoverflow.com/questions/26046348
复制相似问题