答案 0 :(得分:6)
只有关闭范围,您才能创建uniform_int_distribution
,它会生成任何整数:
uniform_int_distribution<int> dist(std::numeric_limits<int>::min(), std::numeric_limits<int>::max());
如果这是半开放范围,则永远不会达到std::numeric_limits<int>::max()
,而只能达到std::numeric_limits<int>::max() - 1
。
C ++ 11标准库中std::uniform_int_distribution
的情况相同。
迭代器的半开范围很常见,因为可以很容易地表示空范围(通过设置begin == end
)。这对于发行版没有意义。
参考文献:Stephan T. Lavavej在2013年Going Native(约14分钟)的演讲"rand() Considered Harmful"中提到了这个确切的原因。这个讲座是关于C ++ 11 <random>
,但当然同样的推理也适用于提升。