我对以下代码片段的流程有一个简单的疑问。我在高级和汇编指令级别上比较了这个代码块。我发现这?:比分支要好得多。
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()是否经过优化?