Мне просто интересно, достаточно ли запустить генератор случайных чисел только один раз в начале программы. Я пишу функции, которые используют случайные числа. Я никогда не задаю генератор rand() внутри функции, а оставляю вызов srand() в основной записи. Например. моя программа может выглядеть так:
void func1()
{
std::cout << "This is func1 " << std::rand() << std::endl;
}
void func2()
{
std::cout << "This is func2 " << std::rand() << std::endl;
}
int main()
{
std::srand(std::time(NULL));
func1();
func2();
return 0;
}
Таким образом, я могу легко отключить раздачу из основной записи. Это полезно при отладке программы — результаты сохраняются каждый раз, когда я запускаю программу без заполнения. Иногда, если проблема возникает из-за какого-то случайного числа, она может просто исчезнуть, если нужно сгенерировать другой набор случайных чисел, поэтому я бы предпочел такой простой механизм для отключения заполнения.
Однако я заметил, что в новом наборе случайных утилит C++11 генератор случайных чисел должен быть создан перед использованием. (например, default_random_engine). И каждый раз генератор приходится засеивать отдельно. Интересно, действительно ли рекомендуется перезагружать генератор всякий раз, когда требуется новый генератор. Я знаю, что могу создать глобальный генератор случайных чисел и заполнить его только один раз, как и раньше, но мне вообще не нравится идея использования глобальных переменных. В противном случае, если я создам локальный генератор случайных чисел, я как бы потеряю возможность глобально отключить раздачу для отладки или любой другой цели.
Я взволнован, чтобы изучить новые возможности в C++11, но иногда это просто очень запутанно. Может ли кто-нибудь сообщить мне, если у меня что-то не так с новыми генераторами случайных чисел? Или что может быть лучшей практикой в С++ 11?