Когда я использую std::random_device?

Согласно стандарту, std::random_device работает следующим образом:

result_type operator()();

  Возвращает: недетерминированное случайное значение, равномерно распределенное между min() и max(), включительно. Это определяется реализацией   как эти значения генерируются.

И есть несколько способов использовать его. Чтобы посеять двигатель:

std::mt19937 eng(std::random_device{}());

Как двигатель сам по себе:

std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);

Поскольку он определяется реализацией, он звучит не так сильно, как, скажем, std::seed_seq или srand(time(nullptr)). Я предпочитаю использовать его как семя, как двигатель или не использовать вообще?

Ответ 1

Вообще говоря, std::random_device должен быть источником самой по-настоящему случайной информации, которую вы можете получить на своей платформе. При этом доступ к нему происходит намного медленнее, чем к std::mt19937, или нет.

Правильное поведение - использовать std::random_device для посева чего-то вроде std::mt19937.