c++表达式求值与输出顺序

freshman_in_program 2013-03-14 03:08:39
primer上有个题,编码如下:
vector<string*>::iterator iter = spvec.begin();
while (iter!=spvec.end()) {
cout << **iter << (**iter).size() << endl;
iter++;
}

这样可以输出每个string的内容和长度。
我想将循环里面的表达式简写为只有一行的,就这样试了:

vector<string*>::iterator iter = spvec.begin();
while (iter!=spvec.end()) {
cout << **iter << (**iter++).size() << endl;
//iter++;
}

结果越界了,我这样改了以后
vector<string*>::iterator iter = spvec.begin();
while (iter!=spvec.end()) {
cout << **iter++ << (**iter).size() << endl;
//iter++;
}

得到的结果就与上面第一次相同,也就是简化的目的到达了。
我的问题是,为什么那个自增运算不是像第二段代码中那样放到后面来简化,怎么样理解第三段代码?
...全文
236 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 starytx 的回复:
看看置顶帖吧,这样的问题不用纠结。如果遇到拿不准优先级的就加上括号。
嗯,已经解决了,谢了。
  • 打赏
  • 举报
回复
引用 3 楼 rocktyt2 的回复:
http://bbs.csdn.net/topics/370153775 置顶这个帖子里有提到 搜 cout << a++ << a; 和你的问题一样
嗯,现在明白了。谢谢~
starytx 2013-03-14
  • 打赏
  • 举报
回复
看看置顶帖吧,这样的问题不用纠结。如果遇到拿不准优先级的就加上括号。
rocktyt 2013-03-14
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/370153775 置顶这个帖子里有提到 搜 cout << a++ << a; 和你的问题一样
  • 打赏
  • 举报
回复
引用 1 楼 rocktyt2 的回复:
不要写这种有平台依赖性的代码,不同的编译器可能有不同行为
额,看到primer上面推荐这样*iter++简写,但是就是这个跟<<一起用的时候好像就有问题了。 第二段和第三段顺序的问题是跟平台有关的吗?
rocktyt 2013-03-14
  • 打赏
  • 举报
回复
不要写这种有平台依赖性的代码,不同的编译器可能有不同行为

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧