Это типичная последовательность объявлений / определений для генерации случайных чисел в C ++ 11:
std::random_device rd
std::default_random_engine gen(rd());
std::uniform_int_distribution<> dist(1, 6);
rd
используется только для заполнения генератора gen
, поэтому я неопределив это в частности.Вместо этого я хотел бы использовать временное для этой цели:
int main() {
std::default_random_engine gen(std::random_device()());
std::uniform_int_distribution<> dist(1,6);
}
Но компилятор выдал мне ошибку:
функция возвращает функцию
Но это работает, если я инициализирую движок как элемент данных:
class A
{
public:
A();
private:
std::default_random_engine gen;
std::uniform_int_distribution<> dist;
}
A::A() : gen(std::random_device()()), dist(1) {}
Так почему я не могу использовать std::random_device()()
в обычном выражении для инициализации генератора случайных чисел, но могу использовать его при инициализации членов данных?Как заставить это работать в нормальном утверждении?Спасибо.
PS: я работаю на Windows 10 с использованием Visual Studio 2015.