为什么range::iota_view的构造函数不将参数移动到成员变量?
在[range.iota.view] 中,众所周知的构造函数的iota_view定义如下(重点是我的):
constexpr explicit iota_view(W value);先决条件:绑定表示
unreachable_sentinel_t或Bound()可从值到达。效果:初始化
value_用value。
为什么构造函数使用value初始化value_而不是std::move(value)?在我看来,它似乎更有效,std::move(value)因为 type 内部可能会有内存分配W,这可能会导致复制构造的开销。
另外,其他范围适配器如filter_viewortransform_view和它们的迭代器在构造时也直接将接受的参数移动到成员变量中,所以这里似乎存在不一致。
那么为什么要iota_view复制构造它的成员变量而不是移动构造呢?这背后有何考虑?