这是在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上工作。