C++ で乱数を取得しようとしていますが、rand()
. これはcpplintが言うことです:
スレッドの安全性を向上させるため
rand_r(...)
に、代わりに使用することを検討してください。rand(...)
私はに切り替えていますがrand_r
、これはcppcheck の言うことです:
古い関数 'rand_r' が呼び出されました。代わりに関数「rand」を使用することをお勧めします。
誰が正しいですか?
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()
andを使用できますrand()
。それ以外の場合、C++11 実装が利用可能な場合は、<random>
ヘッダーで定義された機能を使用します。それ以外の場合は、他の疑似乱数ジェネレーターについてシステムのドキュメントを参照してください。
<random>
C++11 のものを使用します。
STL によって有害と見なされる rand()を監視する