C++ 具名要求:均匀随机位生成器(UniformRandomBitGenerator) (C++11 起)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

均匀随机位生成器是返回无符号整数值的函数对象,其可能结果范围中的每个值都(理想情况)拥有等概率。

均匀随机位生成器的目的并非用做随机数生成器:它们被用作随机位的源(为效率进行批量生成)。任何均匀随机位生成器均可被插入任何随机数分布,以获得随机数(正式而言是随机变量)。

目录

[编辑]要求

类型 G 在满足以下条件的情况下满足均匀随机位生成器(UniformRandomBitGenerator)

给定类型 G 的某个值 g,满足以下所有条件:

  • G::result_type 合法,并且表示一个无符号整数类型。
  • 以下表达式都合法,并且拥有指定的效果:
(C++20 前)
表达式类型要求
G::min()  G::result_type 
  • 产生 Goperator() 能返回的最小值。 
  • 结果值严格小于 G::max()
  • 表达式必须是常量表达式。
G::max()G::result_type
  • 产生 Goperator() 能返回的最大值。
  • 结果值严格大于 G::min()
  • 表达式必须是常量表达式。
g()G::result_type
  • 返回闭区间 [G::min()G::max()] 中的值。
  • 具有均摊常数复杂度。

满足以下所有条件:

(C++20 起)

[编辑]注解

所有随机数引擎(RandomNumberEngine) 均满足此要求。

[编辑]标准库

下列标准库设施期待均匀随机位生成器(UniformRandomBitGenerator) 类型。

(C++17 前)(C++11)
随机重排范围中元素
(函数模板)[编辑]
(C++17)
从序列中随机选择 N 个元素
(函数模板)[编辑]
给定精度的在 [01) 内均匀分布的实数
(函数模板)[编辑]
产生在范围内均匀分布的整数
(类模板)[编辑]
产生在范围内均匀分布的实数
(类模板)[编辑]
所有其他随机数分布

下列标准库设施满足均匀随机位生成器(UniformRandomBitGenerator) 而不另外满足随机数引擎(RandomNumberEngine)

使用硬件熵源的非确定随机数生成器
(类)[编辑]

[编辑]缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2154
(P0898R3)
C++11 不明确 G::min()G::max() 是否要求是常量表达式[1] 要求是常量表达式
  1. 在 C++20 前,这两个表达式的时间复杂度要求是“编译期”。这一用词有歧义,因为“编译期时间复杂度”可以被解读为“可以在编译期求值”或“可以在编译期确定时间复杂度”。

[编辑]参阅

指定类型具备作为均匀随机位生成器的资格
(概念)[编辑]
close