Obie, rodzaj.
Funkcja rand()
jest zdefiniowana przez standard C i od pierwszego takiego standardu w 1989/1990; jest dołączany przez odniesienie w standardzie C++. Od rand()
zależy od stanu, nie jest wątek bezpieczne.
Funkcja rand_r()
została zaprojektowana jako bezpieczna dla wątków alternatywa dla rand()
. Jest to , a nie określone przez normę ISO C lub C++. Został zdefiniowany przez POSIX.1-2001, ale oznaczony jako przestarzały przez POSIX.1-2008 (co oznacza, że jest nadal zdefiniowany przez standard POSIX, ale może zostać usunięty w przyszłej wersji).
Implementacje rand()
, a zatem rand_r()
, mogą być niskiej jakości. Istnieje znacznie lepsze pseudolosowe generatory liczb. W C++ biblioteka <random>
została dodana w C++ 11 i oferuje wiele różnych opcji.
Jeśli chcesz maksymalnej przenośności i nie dbają zbytnio o jakość i przewidywalność generowanych liczb i wątku bezpieczeństwa nie jest problemem, można użyć srand()
i rand()
. W przeciwnym razie, jeśli dostępna jest implementacja C++ 11, użyj funkcji zdefiniowanych w nagłówku <random>
. W przeciwnym razie zapoznaj się z dokumentacją systemu dla innych pseudolosowych generatorów liczb.
Referencje: POSIX, <random>
on cppreference.com.
Jeśli to możliwe, użyj "nowych" obiektów '. 'rand' jest całkiem zły. [Interesujące] (http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful). –