问下,新手问下运算符优先问题

xiexiejohn 2019-10-18 12:08:06

#include <iostream>
using std::cout;
using std::endl;


int main()
{
int a=-5;
a=-a++;
cout<<a<<endl;

return 0;
}
奇怪 vc2013运行结果是6 ,gcc运行结果是5,我也觉的应该是6,这5是怎么算出来的
...全文
121 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiexiejohn 2019-10-20
  • 打赏
  • 举报
回复
谢谢
wowpH 2019-10-18
  • 打赏
  • 举报
回复
有点奇怪,汇编完全看不懂。。。
liups 2019-10-18
  • 打赏
  • 举报
回复
引用 12 楼 xiexiejohn 的回复:
为什么说是未定义的行为,我是新手
标准没有规定是如何的,所以编译器可能会自己决定如何做,这样结果就不确定了。我们应该避免写这样的程序,这也是8楼说挨打的原因
xiexiejohn 2019-10-18
  • 打赏
  • 举报
回复
vc更好理解,gcc更奇怪
xiexiejohn 2019-10-18
  • 打赏
  • 举报
回复
晕。看了下汇编代码发现两个处理是不一样的
xiexiejohn 2019-10-18
  • 打赏
  • 举报
回复
为什么说是未定义的行为,我是新手
xiexiejohn 2019-10-18
  • 打赏
  • 举报
回复
vc和gcc同一代码运算结果不一样
liups 2019-10-18
  • 打赏
  • 举报
回复
引用 10 楼 xiexiejohn 的回复:
刚才想了想以觉的gcc这样才符合运算符优先顺序,vc符合日常观念
请参考7楼!
mr.hman 2019-10-18
  • 打赏
  • 举报
回复
a++ 先运算后自增1 直接输出的是5 本人也小白 之前也做过和你类似的
xiexiejohn 2019-10-18
  • 打赏
  • 举报
回复
刚才想了想以觉的gcc这样才符合运算符优先顺序,vc符合日常观念
liups 2019-10-18
  • 打赏
  • 举报
回复
引用 8 楼 weixin_40290083 的回复:
这种情况估计在考试时才看到,工程上这么写项目经理会打人
考试的话如果答案是5或6都得挨打
weixin_40290083 2019-10-18
  • 打赏
  • 举报
回复
这种情况估计在考试时才看到,工程上这么写项目经理会打人
liups 2019-10-18
  • 打赏
  • 举报
回复
这个是未定义行为!
xiexiejohn 2019-10-18
  • 打赏
  • 举报
回复
a=-a++ vc是解释成a=5; a++ 所以是6
gcc 是a赋值临时中间值 然后a++,是后才把临时中间值赋值给a,搞不懂

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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