random_device()()仅用于初始化数据成员

时间:2019-01-31 21:45:28

标签: c++11 random initialization functor

这是在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:我正在使用Visual Studio 2015在Windows 10上工作。

0 个答案:

没有答案