交换时增加迭代器std::next



考虑代码:

list<int> a{ 4,3,1,2 };
auto i = a.begin();
swap(*i, *(++i));

为什么掉期什么都没做?当以下工作如预期?

list<int> a{ 4,3,1,2 };
auto i = a.begin();
swap(*i, *(next(i)));

在第一个代码中,两个操作*i*(++i)的求值顺序在c++17之后未指定,因此第二个操作可能在第一个操作之前执行,然后交换两个等价值。

在所附的链接中,你可以看到

f(++i, ++i); // undefined behavior until C++17, unspecified after C++17

但在第二段代码中,您有不同的参数,std::next()返回一个新的迭代器。

相关内容

  • 没有找到相关文章

最新更新