【发布时间】:2015-02-02 03:03:53
【问题描述】:
在函数调用上下文中it++ 和++it 的行为的解释是什么——更具体地说,对于函数iter_swap?让我感到困惑的是,以下代码中的 call 2 和 call 4 似乎是 交换元素,而 call 3并且调用 5 交换元素失败。我期待相反的结果,但是,我假设函数参数的一个条目将在另一个之前执行。从输出看,情况似乎并非如此。
那么,出于好奇,这种行为是否已定义?我如何理解事物的执行顺序?谢谢!
#include <iostream>
#include <vector>
#include <algorithm>
int main(void) {
vector<int> a;
a.push_back(1);
a.push_back(2);
vector<int>::iterator it_a, it_b;
it_a = a.begin();
it_b = it_a + 1;
cout << *it_a << " " << *it_b << endl;
// call 1
iter_swap(it_a, it_b);
cout << *it_a << " " << *it_b << endl;
// call 2
iter_swap(it_a, it_a++);
cout << *--it_a << " " << *it_b << endl;
// call 3
iter_swap(it_a, ++it_a);
cout << *--it_a << " " << *it_b << endl;
// call 4
iter_swap(it_a++, it_a);
cout << *--it_a << " " << *it_b << endl;
// call 5
iter_swap(++it_a, it_a);
cout << *--it_a << " " << *it_b << endl;
return 0;
}
输出:
1 2
2 1
1 2
1 2
2 1
2 1
【问题讨论】:
-
未指定参数的求值顺序,且参数列表中没有序列点,因此您的函数调用导致undefined behavior。
标签: c++ iterator post-increment pre-increment