gpt4 book ai didi

c++ - 为什么 `std::sample`把 `UniformRandomBitGenerator`当成&&?

转载 作者:行者123 更新时间:2023-11-30 01:41:55 25 4
gpt4 key购买 nike

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 因为它是标准中的另一个地方,它采用生成器、samplestd::uniform_real_distribution::operator( ) 以不同的方式处理它们。只是好奇这背后的基本原理。

最佳答案

  1. sample最终需要一个非常量生成器,但是允许传入临时生成器也很方便,如果通过非常量左值引用来获取生成器,这将是不可能的。显而易见的解决方案:转发引用,如果提供了 const 左值,则不可避免的编译器错误。

    另一方面,我认为将临时生成器传递给单个分发调用几乎不会像往常一样——事实上,考虑到构建/初始化大多数生成器的开销,绝大多数情况下这样做是一个效率低下的坑。有鉴于此,例如std::vector缺少push_frontpop_front ,通过积极使其成为反模式来阻止这种低效率可能是最好的做法。

  2. 按时间顺序,<random>显着早于 C++11(它来自 TR1,以及之前的 Boost),并且在纳入标准时不一定进行彻底更新以利用新的语言特性。

关于c++ - 为什么 `std::sample`把 `UniformRandomBitGenerator`当成&&?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com