将 std::iter_swap 用于 std::optional
Using std::iter_swap for std::optional
看着 std::iter_swap
reference 我得出结论:
struct A {};
std::experimental::optional< A > x{A{}}, y{A{}};
std::iter_swap(x, y);
是合法的。是这样吗?
对参数的要求是 ForwardIterator 意味着,它们应该只满足一个要求:在取消引用(迭代器)后传递的对象应该保持有效(可取消引用?)状态。理解正确吗?
ForwardIterator concept 比你说的更受限制。
您的示例仅在使用类似此实现的情况下才有效:
template<class ForwardIt1, class ForwardIt2>
void iter_swap(ForwardIt1 a, ForwardIt2 b)
{
using std::swap;
swap(*a, *b);
}
但由于不能保证您实际上不应该使用 iter_swap
作为可选。你真的应该只使用 swap for optional
看着 std::iter_swap
reference 我得出结论:
struct A {};
std::experimental::optional< A > x{A{}}, y{A{}};
std::iter_swap(x, y);
是合法的。是这样吗?
对参数的要求是 ForwardIterator 意味着,它们应该只满足一个要求:在取消引用(迭代器)后传递的对象应该保持有效(可取消引用?)状态。理解正确吗?
ForwardIterator concept 比你说的更受限制。 您的示例仅在使用类似此实现的情况下才有效:
template<class ForwardIt1, class ForwardIt2>
void iter_swap(ForwardIt1 a, ForwardIt2 b)
{
using std::swap;
swap(*a, *b);
}
但由于不能保证您实际上不应该使用 iter_swap
作为可选。你真的应该只使用 swap for optional