繁体   English   中英

我应该使用 rand() 还是 rand_r()?

[英]Should I use rand() or rand_r()?

我正在尝试在 C++ 中获取一个随机数,并且我正在使用rand() 这是cpplint所说的:

考虑使用rand_r(...)而不是rand(...)以提高线程安全性。

我正在切换到rand_r这就是cppcheck所说的:

已调用过时的函数“rand_r”。 建议改用函数“rand”。

谁是对的?

两者,都差不多。

rand()函数是由 C 标准定义的,并且自 1989/1990 年第一个这样的标准以来一直存在; 它通过引用包含在 C++ 标准中。 由于rand()取决于状态,因此它不是线程安全的。

rand_r()函数被设计为rand()的线程安全替代方案。 不是由 ISO C 或 C++ 标准定义的。 它由 POSIX.1-2001 定义,但被 POSIX.1-2008 标记为过时(意味着它仍然由 POSIX 标准定义,但它可能在未来版本中被删除)。

rand()实现,以及rand_r() ,可能是低质量的。 有更好的伪随机数生成器。 对于 C++, <random>库是在 C++11 中添加的,并提供了许多不同的选项。

如果您想要最大的可移植性,并且不太关心生成数字的质量或可预测性,并且线程安全不是问题,则可以使用srand()rand() 否则,如果您有可用的 C++11 实现,请使用<random>标头中定义的功能。 否则,请查阅系统文档以了解其他伪随机数生成器。

参考: POSIX , <random> on cppreference.com

使用来自 C++11 的<random>的东西。

观察 STL 认为有害rand()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM