我应该使用 rand() 还是 rand_r()?
Should I use rand() or rand_r()?
我试图在 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()
取决于状态,因此不是 thread-safe.
rand_r()
函数被设计为 thread-safe 替代 rand()
。它是 不是 ISO C 或 C++ 标准定义的。它由 POSIX.1-2001 定义,但被 POSIX.1-2008 标记为过时(意味着它仍然由 POSIX 标准定义,但可能会在未来版本)。
rand()
的实施,因此 rand_r()
的实施质量可能较低。有更好的 pseudo-random 数字生成器。对于 C++,<random>
库是在 C++11 中添加的,并提供了许多不同的选项。
如果你想要最大的可移植性and你不会太在意生成数字的质量或可预测性andthread-safety 不是问题,您可以使用 srand()
和 rand()
。否则,如果您有可用的 C++11 实现,请使用 <random>
header 中定义的功能。否则,请查阅您的系统文档以了解其他 pseudo-random 数字生成器。
使用 C++11 <random>
中的内容。
观看 S.T.L 的 rand() considered harmful。
我试图在 C++ 中获取一个随机数,我正在使用 rand()
。 cpplint 是这么说的:
Consider using
rand_r(...)
instead ofrand(...)
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()
取决于状态,因此不是 thread-safe.
rand_r()
函数被设计为 thread-safe 替代 rand()
。它是 不是 ISO C 或 C++ 标准定义的。它由 POSIX.1-2001 定义,但被 POSIX.1-2008 标记为过时(意味着它仍然由 POSIX 标准定义,但可能会在未来版本)。
rand()
的实施,因此 rand_r()
的实施质量可能较低。有更好的 pseudo-random 数字生成器。对于 C++,<random>
库是在 C++11 中添加的,并提供了许多不同的选项。
如果你想要最大的可移植性and你不会太在意生成数字的质量或可预测性andthread-safety 不是问题,您可以使用 srand()
和 rand()
。否则,如果您有可用的 C++11 实现,请使用 <random>
header 中定义的功能。否则,请查阅您的系统文档以了解其他 pseudo-random 数字生成器。
使用 C++11 <random>
中的内容。
观看 S.T.L 的 rand() considered harmful。