我应该使用rand()还是rand_r()? 我试图在C++中得到一个随机数,我用的是这是说:

我应该使用rand()还是rand_r()? 我试图在C++中得到一个随机数,我用的是这是说:,c++,cppcheck,cpplint,C++,Cppcheck,Cpplint,考虑使用rand\u r(…)而不是rand(…)来提高线程安全性 我正在切换到rand\u r,上面说: 调用了过时的函数“rand_r”。建议改用函数“rand” 谁是对的?两者都是 rand()函数是由C标准定义的,自1989/1990年第一个这样的标准以来就一直存在;它包含在C++标准中的引用。由于rand()依赖于状态,因此它不是线程安全的 rand\u r()函数是作为rand()的线程安全替代品而设计的。它不是由ISOC或C++标准定义的。它由POSIX.1-2001定义,但被PO

考虑使用
rand\u r(…)
而不是
rand(…)
来提高线程安全性

我正在切换到
rand\u r
,上面说:

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

谁是对的?

两者都是

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

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

rand()
,因此
rand\r()
的实现质量可能很低。还有更好的伪随机数生成器。对于C++,在C++ 11中添加了<代码> <代码>库,并提供了许多不同的选项。 如果您希望实现最大的可移植性,并且不太关心生成的数字的质量或可预测性,而且线程安全性也不是问题,那么可以使用
srand()
rand()
。否则,如果有可用的C++11实现,请使用
标题中定义的功能。否则,请参阅系统文档以了解其他伪随机数生成器

参考文献:,。

使用C++11的
中的内容


由S.T.L.观看

如果可能,请使用“新”设施<代码>兰德非常糟糕。值得注意的是,对于那些不能使用C++11但可以使用Boost的人来说,Boost中也存在C++11的随机性。