我对以下代码片段的流程有一个简单的疑问。我在高级和汇编指令级别上比较了这个代码块。我发现这?:
比分支要好得多。
const int THUMB_IMAGE = 0;
const int ICON_IMAGE = 1;
const int UNKNOWN_IMAGE = 2;
void foo( int nFlag ){
int CopyFlag = nFlag;
if( CopyFlag == THUMB_IMAGE )
CopyFLag = ICON_IMAGE; // Setting THUMB and ICON images to same level
// Executing rest of the code
}
void foo1( int nFlag ){
int CopyFlag = ( nFlag == THUMB_IMAGE ) ?
ICON_IMAGE : nFlag; // Setting THUMB and ICON images to same level
// Executing rest of the code
}
int main(void){
foo( THUMB_IMAGE );
foo1( THUMB_IMAGE );
return 0;
}
在上面的代码片段中,有两个函数,foo()
和foo1()
. 这两个函数将两种图像类型设置为ICON_IMAGE
。
问题是如何分配和if()
执行?
哪些条件语句是高度优化的if()
或三元运算符?:
?
在汇编代码级别,翻译if()
, CMP
(分支)和MOV
指令是必要的。对于?:
操作员,我认为有一些特殊的指令,但完全避免了分支指令。
谁能告诉哪个是最好的方法?
在foo()
中,无论 if 条件如何,都会完成第一个赋值操作。它可能并非一直都需要。
但是在 中foo1()
,这是在?:
操作符部分完成的,避免了不需要的赋值操作。我想知道foo()
或中的代码foo1()
是否经过优化?