【发布时间】:2017-07-31 20:54:25
【问题描述】:
我使用以下代码在 C++ 中生成随机数
std::random_device rdev {};
std::default_random_engine generator {rdev()};
std::uniform_int_distribution dist {a, b};
同样
std::default_random_engine generator {std::random_device{}()};
std::uniform_int_distribution dist {a, b};
我想了解的是使用种子值生成引擎背后的机制。 random_device 使用操作系统中的各种信息获取种子。该值用于初始化引擎对象。对于这里给出的第一个 sn-p 代码,如果 rdev 是一个对象,为什么我们将该值作为 rdev() 传递给引擎。为什么我们在类的对象上使用函数表示法?
对于第二个sn-p的代码,我们如何仅使用类名生成std::random_device对象?
我不确定我的理解问题是特定于随机数生成还是涉及 C++ 语言本身的更大问题。
【问题讨论】:
-
“对于第二个 sn-p 代码,我们如何仅使用类名生成 std::random_device 对象?” - 因为你是不只使用类名。
{}的尾随集是有原因的。 -
更多的是关于 C++ 语言。您可以应用
()运算符的对象称为functors,您可以通过查看一些实例化对象的方法来回答您的大多数其他查询。 -
"为什么我们在类的对象上使用函数符号?" 这是一个运算符。