首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的srand()范围

C++中的srand()范围
EN

Stack Overflow用户
提问于 2014-09-25 19:15:03
回答 2查看 5.9K关注 0票数 9

当您在函数中调用srand()时,它是否只在该函数中启动rand()

下面是函数main,其中调用了srand()

代码语言:javascript
复制
int main(){
    srand(static_cast<unsigned int>(time(0)));

    random_number();
}

void random_number(){
    rand();
}

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-25 19:23:50

srand在全球范围内是有效的,我们可以通过起草C99标准看到这一点,我们可以引用C标准,因为C++回到了C库函数的C标准,它说(强调我的):

srand函数使用参数作为新的伪随机数序列的种子,这些伪随机数将通过随后对rand的调用返回。如果使用相同的种子值调用srand,则应重复伪随机数序列。如果在对srand进行任何调用之前调用rand,则应生成与首次调用srand时相同的序列,其种子值为1。

它并不将其效果限制在它所使用的范围内,它只是说它会影响随后对rand的调用。

标准草案中提供的可移植实现的例子更加明确地表明,其影响是全球性的:

代码语言:javascript
复制
static unsigned long int next = 1;

void srand(unsigned int seed)
{
   next = seed;
}
票数 11
EN

Stack Overflow用户

发布于 2014-09-25 19:16:19

不,它适用于全球。它不仅限于函数,甚至不限于线程。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26046348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档