gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:38:38 26 4
gpt4 key购买 nike

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

Consider using rand_r(...) instead of rand(...) for improved thread safety.

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

Obsolete function 'rand_r' called. It is recommended to use the function 'rand' instead.

谁是对的?

最佳答案

两者都有。

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++ - 我应该使用 rand() 还是 rand_r()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29135158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com