C ++中的srand()作用域

时间:2014-09-25 19:15:04

标签: c++ random srand

当你在函数内部调用srand()时,它是否只在该函数内部rand()种子?

以下是调用main的函数srand()

int main(){
    srand(static_cast<unsigned int>(time(0)));

    random_number();
}

void random_number(){
    rand();
}

使用random_number的函数rand()位于调用srand()的位置之外。

所以我的问题是 - 如果你使用rand()种子srand(),你可以使用rand()之外的种子srand()吗?包括功能,不同文件等。

2 个答案:

答案 0 :(得分:10)

srand在全局生效,我们可以通过转到draft C99 standard来看到这一点,我们可以参考C标准,因为C ++回归到C库函数的C标准,它说(< em>强调我的):

  

srand函数使用参数作为新随机伪随机序列的种子   要通过后续调用rand 返回的数字。如果srand随后被调用   在相同的种子值下,应重复伪随机数的序列。如果兰特是   在对srand进行任何调用之前调用,应生成相同的序列   当第一次使用种子值1调用srand时。

它不会将其影响限制在它所使用的范围内,只是说它影响后续调用rand

标准草案中提供的可移植实现的示例使得更明确的是效果是全局的:

static unsigned long int next = 1;

void srand(unsigned int seed)
{
   next = seed;
}

答案 1 :(得分:7)

不,它适用于全球。它不仅限于功能,甚至不限于线程。

cplusplus.com有更多信息: http://www.cplusplus.com/reference/cstdlib/srand/