请问这个表达式为什么成立了?

cutenoob 2006-05-15 01:10:31
int a=3;

a++==++a //为什么成立了?
...全文
172 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2006-05-15
  • 打赏
  • 举报
回复
“==”是判断是否相等;
“=”则是赋值;
完全不一样的东西,怎么能这样比较呢。

“=”左边如果允许编译器产生临时变量,那有什么意义呢?赋了值,却连自己都不知道在哪儿。
cutenoob 2006-05-15
  • 打赏
  • 举报
回复
我知道a++==++a 这个表达式比较的是a....

我不理解的是为什么 '= =' 的左边可以有a++ 这种会产生临时变量的表达式 在'=' 左边是不允许的~~
koolfool 2006-05-15
  • 打赏
  • 举报
回复
对于内置类型,编译器一般对递增递减操作符进行了优化
具体做法就是二元运算,类似"=="实参都是传地址
因此右边的++a递增同时,左边的a++的值也递增了
所以这个等式总是成立的
用户定义类型就不是这样了

你感兴趣可以研究一下gcc编译出来的汇编码

dmt9697 2006-05-15
  • 打赏
  • 举报
回复
int a=3;

a++ == ++a //先计算右边,++a后,a为4,右边是后缀++,所以右边现在也是4,只有在这个表达式执行完以后,a才为5.
jenycheng 2006-05-15
  • 打赏
  • 举报
回复
你判断的始终是a
a 在右边加一了, 左边的不是也就是a + 1 后的值了
sankt 2006-05-15
  • 打赏
  • 举报
回复
int a=3;

a++ == ++a //先计算左边,++a后,a为4,右边是后缀++,所以右边现在也是4,只有在这个表达式执行完以后,a才为5.

cutenoob 2006-05-15
  • 打赏
  • 举报
回复
疑问就是为什么 '==' 左边可以有a++这种会产生临时变量的表达式
晨星 2006-05-15
  • 打赏
  • 举报
回复
这个得看不同的编译器吧。
cutenoob 2006-05-15
  • 打赏
  • 举报
回复
自己顶一下..

64,682

社区成员

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

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