简单代码,帮我分析一下结果

wm219 2009-02-02 10:17:23

#include <iostream>
using namespace std;

void main()
{
int i = 0;

cout << "i="
<< i++
<< '\n'
<< "i="
<< i++
<< '\n'
<< "i="
<< i
<< endl;

}


结果是:
i = 1
i = 0
i = 0

得到这个结果,不太明白为什么,谢谢!
...全文
126 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wm219 2009-02-02
  • 打赏
  • 举报
回复
谢谢
yutaooo 2009-02-02
  • 打赏
  • 举报
回复

1. << 应该是左结合的。

2. LZ 的代码行为未定义。问题在于,i++ 有副效应。可以肯定的是,在 operator << 之前,作为操作符的参数,值一定是被计算出来了。但是,这几个 i++ 和 i 那个首先被求值是不确定的。 编译器可以为了优化,选择任意的一个首先求值,比如先求出当中的那个 i++。

因此,明确的写。分隔开。放在几个语句中。显示的确定求值顺序比较好。
waizqfor 2009-02-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wm219 的回复:]
回6楼,正如前面几位说的那样,我的写法不符合标准,如果按标准写是可以得到结果
我只想知道那种写法,为什么会得到这样的结果,并不是想得到我想要的输出
[/Quote]
既然都非标准了 你这代码输出什么 肯定都没有一个定论啊
我拿VC6 是你输出的结果 拿DEV-C++ 输出0 1 2
wm219 2009-02-02
  • 打赏
  • 举报
回复
回6楼,正如前面几位说的那样,我的写法不符合标准,如果按标准写是可以得到结果
我只想知道那种写法,为什么会得到这样的结果,并不是想得到我想要的输出
xzfy823 2009-02-02
  • 打赏
  • 举报
回复
i++和++i的運算方法:
如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;
首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值
我也感覺是輸出順序有問題
li985837 2009-02-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

void main()
{
int i = 0;

cout << "i="
<< i++
<< '\n';
cout << "i="
<< i++
<< '\n';
cout << "i="
<< i
<< endl;

}
如果不确定的话,就加上一些括号,保证输出的顺序。
这样保证了你要想要的输出。
wm219 2009-02-02
  • 打赏
  • 举报
回复
<< 是从右往左计算的吗?
<< 输出是从左往右吧?
lbh2001 2009-02-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lbh2001 的回复:]
从左往右求值参数i就知道了
但最好不要这样写,这种写法标准是未定义的
[/Quote]
从右往左求值参数i就知道了
但最好不要这样写,这种写法标准是未定义的
TimidSparrow 2009-02-02
  • 打赏
  • 举报
回复
你这几行程序是C++的一个表达式,在不违反运算规则的前提下,先计算那些运算,后缀++如何计算,都与具体的编译器有关,说不准的。
lbh2001 2009-02-02
  • 打赏
  • 举报
回复
从左往右求值参数i就知道了
但最好不要这样写,这种写法标准是未定义的
n_yHHy_n 2009-02-02
  • 打赏
  • 举报
回复
<<的运算方向,从右至左?

65,211

社区成员

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

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