当前位置: 代码迷 >> C语言 >> ?:表达式的执行顺序问题?
  详细解决方案

?:表达式的执行顺序问题?

热度:30   发布时间:2008-02-01 02:11:28.0
c/c++标准只明确规定了逻辑表达式的运算顺序, 其他运算在优先级相同的时候, 编译器可以自主决定计算顺序。所以,楼主的程序运行结果在不同编译器中可能是不同的。就算在同一个编译器中, 对不同的代码,计算顺序也可能是不相同的。因为编译器会对代码进行优化。 比如有代码如下:
int a=3;
int b=5;
int c= a*b*b+ a*b;
这时候, 编译器会发现, 先计算出右边的a*b, 左边的a*b*b只要在右边的基础上*b就行了, 所以它会先计算右边(当然有些编译器也可能先计算左边,比如有位牛人,他说,我要自己写个编译器,先计算左边,可以, 这是不违反c/c++标准的), 如果我们反过来写成: int c= a*b + a*b*b; 一般来说它就会先计算左边。那如果是 int c= a*b +a/b; 呢? 这时候就不知道到底先计算哪边了。事实上, c/c++之所以不规定运算顺序, 就是为了让编译器进行优化, 以实现最高的效率。
----------------解决方案--------------------------------------------------------
回复 21# 的帖子
对你的认真态度表示赞同,希望某些人也会象你这样负责,虽然你贴的某些东西-------如聊天记录等----------会造成不必要的麻烦,但您回的这个帖子,我会认真阅读并深刻理解,并诚挚地说:谢谢~!
----------------解决方案--------------------------------------------------------
回复 21# 的帖子
谢谢您这么详细和认真地讲解,让我确实认识了很多.我会慢慢去参透的.
看来热心人还是很多啊!!!
真诚地向您说声:谢谢!!

----------------解决方案--------------------------------------------------------
关于我的主题被锁之事,已到意见区投诉,请众位去看下帖子,发表下意见-----欢迎意见相同的,也欢迎意见不同的。
----------------解决方案--------------------------------------------------------
  相关解决方案