两者都可以使用。
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>
头文件中定义的功能。否则,请查阅系统文档以获取其他伪随机数生成器。
<random>
工具,而不是rand
,因为rand
表现较差。这里有一些有趣的内容。 - Baum mit Augen