请问下面这段程序的输出结果为什么是这样,迭代器莫名其妙的递增?


   
  #include <iostream>
  
#include <string>
using namespace std;

int main()
{
string hexdigits = "0123456789";
string::iterator iter = hexdigits.begin();
cout << *iter++ << endl;
cout << (*iter)++ << " "<< *iter << endl;
cout << *iter << endl;
cout << *iter << " " << ++(*iter) << endl;
cout << hexdigits << endl; //新补充
return 0;
}

output:
0
1 1
2
3 3
0323456789//新补充

我认为的输出结果是:
0
1 1
1
1 2
0123456789//新补充

请问这是为什么呢?迭代器在递增一次后,并没有再递增啊,实在不知道为什么,希望大家解我心头疑惑,不胜感激。

=========================================
我已经明白了:
1.迭代器的确是递增了一次,没错。
2.*iter返回的是元素的引用,所以++之后,string的元素递增了。
3.表达式运算顺序是未定义的,如果想要可靠地结果,要放在外面计算!

C/C++ 语言的规定告诉我们,任何依赖于特定计算顺序、依赖于在顺序点之间实现修改效果的表达式,其结果都没有保证。程序设计中应该贯彻的规则是:如果在任何“完整表达式”(形成一段由顺序点结束的计算)里存在对同一“变量”的多个引用,那么表达式里就不应该出现对这一“变量”的副作用。否则就不能保证得到预期结果。

关于C,C++表达式求值顺序

C++

堂本刚砸光 9 years, 10 months ago

Your Answer