Entrambi, più o meno.
La funzione rand()
è definita dallo standard C ed è stata la prima di tale standard nel 1989/1990; è incluso per riferimento nello standard C++. Poiché rand()
dipende dallo stato, non è thread-safe.
La funzione rand_r()
è stata progettata come un'alternativa thread-safe a rand()
. È non definito dallo standard ISO C o C++. È stato definito da POSIX.1-2001, ma contrassegnato come obsoleto da POSIX.1-2008 (il che significa che è ancora definito dallo standard POSIX, ma potrebbe essere rimosso in una versione futura).
Implementazioni di rand()
, e quindi del rand_r()
, può essere di bassa qualità. Esistono generatori di numeri pseudo-casuali molto migliori. Per C++, la libreria <random>
è stata aggiunta in C++ 11 e offre diverse opzioni.
Se si desidera la massima portabilità e non si cura troppo della qualità o prevedibilità dei numeri generati e thread-sicurezza non è una preoccupazione, è possibile utilizzare srand()
e rand()
. In caso contrario, se è disponibile un'implementazione C++ 11, utilizzare le funzionalità definite nell'intestazione <random>
. In caso contrario, consultare la documentazione del proprio sistema per altri generatori di numeri pseudo casuali.
Riferimenti: POSIX, <random>
on cppreference.com.
fonte
2015-03-19 00:54:52
Se possibile, utilizzare i "nuovi" '' strutture. 'rand' è piuttosto male. [Interessante] (http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful). –