关于++i, i++的一个弱弱的问题

FranklinKing 2008-12-30 12:23:48
#include<iostream>

using namespace std;

int main()
{
int i = 0;
i = i++;
cout << i << endl;
return 0;
}

为什么程序的输出是0 ,而不是1呢?
怎么解释合理啊?
...全文
187 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-01-06
  • 打赏
  • 举报
回复
在VC6.0中是1
liuenhai211 2009-01-06
  • 打赏
  • 举报
回复
up
shenmou 2009-01-06
  • 打赏
  • 举报
回复
c/c++ 也有未定义的情况,以上就是其中一种,楼主应嘎避免使用这种语法。
ypb362148418 2009-01-06
  • 打赏
  • 举报
回复
是先将i赋值给等号左边的变量,再给i+1,所以显示的i就是0
artwl_cn 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 longyaxing 的回复:]
程序的写法不符合C++标准规范,可能跟编译器有关:
int i = 0;
i = i++; //等号左边的i在定义时已经赋值为0,

需要搞清楚以下两个知识点:
1. i++是先取得i的值,赋予其他变量或者自身,然后加1;
例:
int i=0;
cout < <i++ < <endl;//输出 0
cout < <i < <endl;//输出 1
2. ++i是先加1,然后将加1后的结果赋予变量或自身
例:
int i=0;
cout < <++i < <endl;//输出 1
cout < <i < <en…
[/Quote]
就是这样!
herman~~ 2009-01-06
  • 打赏
  • 举报
回复
这样使用不合理
使用i++
cougar0709 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 longyaxing 的回复:]
程序的写法不符合C++标准规范,可能跟编译器有关:
int i = 0;
i = i++; //等号左边的i在定义时已经赋值为0,

需要搞清楚以下两个知识点:
1. i++是先取得i的值,赋予其他变量或者自身,然后加1;
例:
int i=0;
cout < <i++ < <endl;//输出 0
cout < <i < <endl;//输出 1
2. ++i是先加1,然后将加1后的结果赋予变量或自身
例:
int i=0;
cout < <++i < <endl;//输出 1
cout < <i < <en…
[/Quote]
up
fantasticeb 2009-01-05
  • 打赏
  • 举报
回复
++在前,先加1再赋值,++在后,先赋值再加。
霍大脚 2009-01-05
  • 打赏
  • 举报
回复
C++没有对这种对一个变量多次递增递减左右操作做出正确的答案,以后别问这种问题了
hailei0526 2009-01-05
  • 打赏
  • 举报
回复
i=i++;
此等式在计算机中自右向左运行,
而且i++是先使用i的值
然后自增运算。
所以直接赋给i的值应该是0
YassinLong 2009-01-05
  • 打赏
  • 举报
回复
程序的写法不符合C++标准规范,可能跟编译器有关:
int i = 0;
i = i++; //等号左边的i在定义时已经赋值为0,

需要搞清楚以下两个知识点:
1. i++是先取得i的值,赋予其他变量或者自身,然后加1;
例:
int i=0;
cout<<i++<<endl;//输出 0
cout<<i<<endl;//输出 1
2. ++i是先加1,然后将加1后的结果赋予变量或自身
例:
int i=0;
cout<<++i<<endl;//输出 1
cout<<i<<endl;//输出 1

xiaoyisnail 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lann64 的回复:]
i = i++; //根本就不该这样使用。
[/Quote]

up
lann64 2008-12-30
  • 打赏
  • 举报
回复
i = i++; //根本就不该这样使用。
P_ghost 2008-12-30
  • 打赏
  • 举报
回复

int int::operator++ ( int )
{
int old = *this;
*this += 1;
return old;
}
baihacker 2008-12-30
  • 打赏
  • 举报
回复
i的地址给出来.
把i的值放在一个临时变量里.
i的值加1.
然后把临时变量的值放回i,所以没有变..

另外你这里=左右都有i...危险.
bennyyyyy 2008-12-30
  • 打赏
  • 举报
回复
i++是先执行表达式,再给i加1,所以i还是0
liberpc 2008-12-30
  • 打赏
  • 举报
回复
i++输出0,语句执行时会生成一临时变量,值为1;
++i输出1,不会生成临时变量,直接对i做+1
jiangheng2008 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Arthas102 的回复:]
VS2008的结果是1,这个问题和编译器的处理有关吧
[/Quote]
up

yang_fujiang 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Arthas102 的回复:]
VS2008的结果是1,这个问题和编译器的处理有关吧
[/Quote]
有可能
Arthas102 2008-12-30
  • 打赏
  • 举报
回复
VS2008的结果是1,这个问题和编译器的处理有关吧
加载更多回复(2)

65,211

社区成员

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

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