为什么 std::uninitialized_move 不存在

Why is std::uninitialized_move absent?

本文关键字:move 不存在 uninitialized std 为什么      更新时间:2023-10-16

C++11 标准库包括以下相关算法:

template <class InputIterator, class ForwardIterator>
  ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
                                     ForwardIterator result);
template <class ForwardIterator, class T>
  void uninitialized_fill(ForwardIterator first, ForwardIterator last,
                          const T& x);
template<class InputIterator, class OutputIterator>
  OutputIterator copy(InputIterator first, InputIterator last,
                      OutputIterator result);
template<class ForwardIterator, class T>
  void fill(ForwardIterator first, ForwardIterator last, const T& value);
template<class InputIterator, class OutputIterator>
  OutputIterator move(InputIterator first, InputIterator last,
                      OutputIterator result);

没有标准的uninitialized_move算法。这是疏忽,还是有意为之?

如果是设计使然,理由是什么?

您可以使用uninitialized_copy和移动迭代器获得uninitialized_move的效果:

std::uninitialized_copy(std::make_move_iterator(first),
                        std::make_move_iterator(last),
                        out);

即使它也可以通过std::copy和移动迭代器实现,std::move仍然存在,因为委员会预计它的使用会频繁,并决定将其作为便利功能提供[1] [2]。