为什么range::iota_view的构造函数不将参数移动到成员变量?

在[range.iota.view] 中,众所周知的构造函数的iota_view定义如下(重点是我的):

constexpr explicit iota_view(W value);

先决条件:绑定表示unreachable_­sentinel_­tBound()可从值到达。

效果:初始化value_­value

为什么构造函数使用value初始化value_而不是std::move(value)?在我看来,它似乎更有效,std::move(value)因为 type 内部可能会有内存分配W,这可能会导致复制构造的开销。

另外,其他范围适配器如filter_viewortransform_view和它们的迭代器在构造时也直接将接受的参数移动到成员变量中,所以这里似乎存在不一致。

那么为什么要iota_view复制构造它的成员变量而不是移动构造呢?这背后有何考虑?

以上是为什么range::iota_view的构造函数不将参数移动到成员变量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>