每
[back.insert.iterator]
namespace std {
template<class Container>
class back_insert_iterator {
protected:
Container* container;
public:
using iterator_category = output_iterator_tag;
using value_type = void;
using difference_type = ptrdiff_t;
using pointer = void;
using reference = void;
using container_type = Container;
constexpr explicit back_insert_iterator(Container& x);
constexpr back_insert_iterator& operator=(const typename Container::value_type& value);
constexpr back_insert_iterator& operator=(typename Container::value_type&& value);
constexpr back_insert_iterator& operator*();
constexpr back_insert_iterator& operator++();
constexpr back_insert_iterator operator++(int);
};
}
constexpr explicit back_insert_iterator(Container& x);
1.
影响
:初始化
container
具有
addressof(x)
.
constexpr back_insert_iterator& operator=(const typename Container::value_type& value);
2.
影响
:好像通过:
container->push_back(value);
3.
退换商品
:
*this
.
constexpr back_insert_iterator& operator=(typename Container::value_type&& value);
4.
影响
:好像通过:
container->push_back(stdâ::âmove(value));
5.
退换商品
:
这
.
[...]
正如我们所看到的,迭代器获取一个指向容器的指针,然后
push_back
直接在容器上调用,因此没有UB的机会。