如果效果不是
short
,int
,long
,long long
,unsigned short
,unsigned int
,{{ {1}}或unsigned long
。
如果我不关心范围,我可以掩盖更大类型的位来生成随机数。如果没有,那就更复杂了。为什么默认情况下不提供字节类型?
答案 0 :(得分:14)
此uniform_int_distribution<unsigned char> should be permitted上有一个图书馆工作组尚未解决的问题,其中包括:
我不知道
<random>
中与16位一起使用的任何内容 整数但是以8位整数失败,所以我怀疑IntType
可以简单地扩展UIntType
以允许char家族。 或者,这种变化可能仅限于 uniform_int_distribution单独,绝对安全。一个<random>
专家应该决定哪种变化最好。
建议的解决方案是将限制更改为允许标准整数类型:
具有名为
IntType
的模板类型参数是未定义的,除非 相应的模板参数是cv-unqualified,是a 标准整数类型(3.9.1 [basic.fundamental]
和
具有名为
UIntType
的模板类型参数未定义 除非相应的模板参数是cv-unqualified并且是a 标准无符号整数类型(3.9.1 [basic.fundamental])
这会让你未签名 / 签名的字符虽然不是 uint8_t 或 int8_t ,但它们可能是等效的。省略了扩展的整体类型,以简化措辞并最大限度地达成共识:
这也排除了扩展的整数类型和宽字符类型,这些类似于最好的东西。我不反对支持这些类型;我只是选择了这个来简化措辞,并希望最大限度地达成共识。
注意,这排除了char
,因为它是实现定义的char
是否已签名。
请注意,此主题也在std-discussion list中提出。
Jonathan Wakely指出这个提案存在争议,并评论说他上次讨论的笔记包括以下内容:
非常有意识地说不支持单字节整数,而不是偶然的遗漏,所以我们应该在不咨询C ++ 11的设计者的情况下改变它的注意事项
他建议在random_device
添加一个成员来提供单个字节,这似乎是一个合理的选择。