gpt4 book ai didi

c++ - 比较 if(...) 和 ? :,哪个更好?

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:52 26 4
gpt4 key购买 nike

<分区>

我对下面代码片段的流程有一个简单的疑问。我在高级和汇编指令级别比较了这个代码块。而且我发现 ?: 比分支要好得多。

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() 中的代码是否分别进行了优化?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com