Оба, вид.
Функция 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.
Если возможно, используйте «новые» '' средства. «Ранд» довольно плох. [Интересно] (http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful). –