C++中的srand()作用域

Sha*_*dow 6 c++ random srand

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

下面是函数main在那里srand()被调用.

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

    random_number();
}

void random_number(){
    rand();
}
Run Code Online (Sandbox Code Playgroud)

该功能random_number在那里rand()使用的是地方外srand()被调用.

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

Sha*_*our 10

srand在全局范围内,我们可以通过转到C99标准草案看到这一点,我们可以参考C标准,因为C++回归到C库函数的C标准,它说(强调我的):

srand函数使用该参数作为后续调用rand返回的新伪随机数序列的种子.如果随后使用相同的种子值调用srand,则应重复伪随机数序列.如果在对srand进行任何调用之前调用rand,则应该生成相同的序列,就像第一次使用种子值1调用srand时一样.

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

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

static unsigned long int next = 1;

void srand(unsigned int seed)
{
   next = seed;
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*ßen 7

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

cplusplus.com提供了更多信息:http://www.cplusplus.com/reference/cstdlib/srand/