- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
std::uniform_real_distribution::operator()
是:
template< class Generator >
result_type operator()( Generator& g );
而 std::sample
是:
template< class PopulationIterator, class SampleIterator,
class Distance, class UniformRandomBitGenerator >
SampleIterator sample( PopulationIterator first, PopulationIterator last,
SampleIterator out, Distance n,
UniformRandomBitGenerator&& g);
我在这里只引用 uniform_real_distribution
因为它是标准中的另一个地方,它采用生成器、sample
和 std::uniform_real_distribution::operator( )
以不同的方式处理它们。只是好奇这背后的基本原理。
最佳答案
sample
最终需要一个非常量生成器,但是允许传入临时生成器也很方便,如果通过非常量左值引用来获取生成器,这将是不可能的。显而易见的解决方案:转发引用,如果提供了 const 左值,则不可避免的编译器错误。
另一方面,我认为将临时生成器传递给单个分发调用几乎不会像往常一样——事实上,考虑到构建/初始化大多数生成器的开销,绝大多数情况下这样做是一个效率低下的坑。有鉴于此,例如std::vector
缺少push_front
和 pop_front
,通过积极使其成为反模式来阻止这种低效率可能是最好的做法。
按时间顺序,<random>
显着早于 C++11(它来自 TR1,以及之前的 Boost),并且在纳入标准时不一定进行彻底更新以利用新的语言特性。
关于c++ - 为什么 `std::sample`把 `UniformRandomBitGenerator`当成&&?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557222/
std::uniform_real_distribution::operator() 是: template result_type operator()( Generator& g ); 而 std
我是一名优秀的程序员,十分优秀!