- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
std::random_device
的拷贝构造函数被删除了,我不知道为什么。
我从 docs 中找到的唯一笔记是:
2) The copy constructor is deleted:
std::random_device
is not copyable.
似乎没有明确的理由说明为什么要删除它。这背后的原因是什么?
最佳答案
std::random_device
不可复制的原因是,如果可以,则复制的实例可能返回与原始实例完全相同的数字(这是实现定义的虽然)!
这是因为(docs):
std::random_device
may be implemented in terms of an implementation-defined pseudo-random number engine if a non-deterministic source (e.g. a hardware device) is not available to the implementation. In this case eachstd::random_device
object may generate the same number sequence.
一些实现将因此实现 PRNG。 PRNG 通常使用种子值(和其他一些状态)实现,从中生成“随机”数。通过复制 std::random_device
,这将复制种子值,以及生成器用来生成随机数(由实现定义)的任何其他内部状态。
您将有 2 个随机设备,它们是确定性的,因为它们生成相同的数字序列:
std::random_device device1;
std::random_device device2 = device1; //For demonstration purposes only
std::uniform_int_distribution dis{ 0, 10 };
int randomNumber1 = dis(device1);
int randomNumber2 = dis(device2);
//Note that "randomNumber1 == randomNumber2"! They use exactly the same random number
//generator with the same seed value, etc. -> Same numbers are generated!
实现可能始终对每个 std::random_device
使用相同的种子值,这意味着每次都会为不同的随机设备生成相同的数字序列。或者它可能使用一些不确定的来源(从上面获取):
In this case each
std::random_device
object may generate the same number sequence.
[...] if a non-deterministic source (e.g a hardware device) [...]
在那些情况下,随机设备是否可复制并不重要(人们不会认为该拷贝实际上是一个拷贝),但它确实重要的是实现在何处生成使用 PRNG 的不同随机设备的不同值。
实现复制构造函数(和复制赋值运算符)会破坏使用 PRNG 的实现的假设,因此它被删除,以保持为每个实现生成的数字的“随机性”(只要实现允许它)。
关于c++ - 为什么 std::random_device 将其复制构造函数定义为已删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860439/
我有一个包含两个随机源的类。 std::random_device rd; std::mt19937 random_engine; 我通过调用 std::random_device 为 std::mt
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我需要从不同的 C++ 随机数生成算法中获取数据,为此我创建了一些程序。其中一些使用伪随机数生成器,而另一些使用 random_device(非确定性随机数生成器)。下面的程序属于第二组: #incl
我对 c++11 随机库有点困惑。 我的理解:我们需要两个独立的概念: 随机引擎,可以是: 伪(需要种子)又名 PRNG 真正的随机数生成器 分布:它将从引擎获得的数字映射到特定的区间,使用特定的分布
是否保证 random_device 不会在每个新线程的相同内部状态下启动?那么下面的代码很可能给出两个不同的值? #include #include #include #include us
#include #include using namespace std; int main() { vector coll{1, 2, 3, 4}; shuffle(coll.
我看到很多人一起谈论安全和 std::random_device。 例如,here幻灯片 22。 根据 cppreference , std::random_device : std::random_
根据标准,std::random_device 按以下方式工作: result_type operator()(); Returns: A non-deterministic random value
典型的现代获取随机数的方法是这样的: std::random_device rd; std::mt19937 engine{rd()}; std::uniform_int_distribution<>
我有一些看起来有点像这样的代码: std::random_device rd; #pragma omp parallel { std::mt19937 gen(rd()); #prag
我试着解决这个问题: c++0x_warning.h:32: Fehler:#error This file requires compiler and library support for the
有人知道如何在 ubuntu 上安装 random_device 吗?安装了来自 repo 的所有 boost 包。 我收到的错误是: fatal error :boost/random/random
我尝试运行一个来自 cppreference 的简单示例关于std::random_device , 但在函数调用线上 d(rd1)程序进入无限循环,永不返回。 代码如下: #include #in
我正在使用 std::random_device 并想检查它的剩余熵。根据 cppreference.com: std::random_device::entropy double entropy()
我是 C++ 初学者,我对 C++0x 随机数生成器有疑问。我想使用 Mersenne twister 引擎来生成随机 int64_t 数字,并且我使用我之前找到的一些信息编写了一个函数: #incl
假设我有这个跨平台程序 #include #include int main() { std::random_device rd; std::cout dist(0, 9);
std::random_device 的拷贝构造函数被删除了,我不知道为什么。 我从 docs 中找到的唯一笔记是: 2) The copy constructor is deleted: std::
引自cppreference : std::random_device is a non-deterministic random number engine, although implementa
gcc implementation std::random_device 对我来说似乎很奇怪。具体来说,第 137 行: random_device::result_type random_
我在 Windows 中使用 g++ 和 MinGW 来编译我的 c++ 代码,它看起来像这样: std::mt19937_64 rng(std::random_device{}()); std::u
我是一名优秀的程序员,十分优秀!