C++的三目运算符效率如何

来源:百度知道 编辑:UC知道 时间:2024/06/13 17:33:09
听说还不如用if,else,是吗

如果说在可读性、效率上?:都比不上if/else,那咱还要它干嘛!而且跟踪调试上来说?:一定就比if/else差?

这些暂且都不说,看看下面这段代码:
#include <stdio.h>
int
main()
{
int a = 1, b = 2, c;
if(a < b)
c = a;
else
c = b;
c = a < b ? a : b;
return 0;
}
用g++得到其对应的汇编代码:
movl $1,-4(%ebp) ;a
movl $2,-8(%ebp) ;b
movl -4(%ebp),%eax ;if/else开始
cmpl -8(%ebp),%eax
jge L2
movl -4(%ebp),%eax
movl %eax,-12(%ebp)
jmp L3
L2:
movl -8(%ebp),%eax
movl %eax,-12(%ebp) ;if/else结束
L3:
movl -8(%ebp),%eax ; ?:开始
cmpl -4(%ebp),%eax
jle L4
movl -4(%ebp),%eax
L4:
movl %eax,-12(%ebp) ; ?:结束
算起来,if/else用了8条指令,?:用了5条,这个差距大家并不觉得大吗?如果这是在一个循环里面呢?

适当的时候知道用?:代替if/else,这是功力,是经验

  效率:
  如果说在可读性、效率上都比不上if/else,那咱还要它干嘛!而且跟踪调试上来说,一定就比if/else差。
这些暂且都不说,看看下面这段代码:
#include <stdio.h>
int
main()
{
int a = 1, b = 2, c;
if(