before_begin() 之后的擦除元素是否定义在空 std::forward_list 中?
Is erasing element after before_begin() defined in an empty std::forward_list?
此代码是否在 C++ 标准库中定义了行为?
std::forward_list<T> list;
list.erase_after(list.before_begin());
直觉会说不,但我无法找到针对此特定案例的确切标准措辞。
erase_after
的前提条件是:
iterator erase_after(const_iterator position);
Requires: The iterator following position
is dereferenceable.
所以你的例子有未定义的行为,因为 list
是空的,所以 list.before_begin()
不可递增,所以它后面没有迭代器。
如果列表至少有一个元素,则 list.erase_after(list.before_begin())
有效。
此代码是否在 C++ 标准库中定义了行为?
std::forward_list<T> list;
list.erase_after(list.before_begin());
直觉会说不,但我无法找到针对此特定案例的确切标准措辞。
erase_after
的前提条件是:
iterator erase_after(const_iterator position);
Requires: The iterator following
position
is dereferenceable.
所以你的例子有未定义的行为,因为 list
是空的,所以 list.before_begin()
不可递增,所以它后面没有迭代器。
如果列表至少有一个元素,则 list.erase_after(list.before_begin())
有效。