random_device () () работает только для инициализации членов данных - PullRequest
0 голосов
/ 01 февраля 2019

Это типичная последовательность объявлений / определений для генерации случайных чисел в 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.

...