三元运算符在编译期间是否扩展到 if-else 块中?
Does ternary operator gets expanded into if-else block during compilation?
编译时c代码转汇编时,三元运算符是否转成if-else块?
答案是否定的 if else 块将在编译后的 c 中创建
简答:没有。
机器指令(或汇编,粗略地说,是人类更容易理解的机器指令的更高级别表示)没有 if
/else
构造。顶多会出现某种形式的条件跳转。
实际上,if
/else
构造最初可能会映射到使用条件跳转的代码。三元 ?:
的工作至少最初可能以相同的方式映射。
但是,编译器会对代码进行一些相当高级的优化。根据 CPU 的需要,优化器可能会完全重新排序或删除一些具有条件跳转的代码块,并使用其他机制将其替换为产生相同结果的其他代码。
编译时c代码转汇编时,三元运算符是否转成if-else块?
答案是否定的 if else 块将在编译后的 c 中创建
简答:没有。
机器指令(或汇编,粗略地说,是人类更容易理解的机器指令的更高级别表示)没有 if
/else
构造。顶多会出现某种形式的条件跳转。
实际上,if
/else
构造最初可能会映射到使用条件跳转的代码。三元 ?:
的工作至少最初可能以相同的方式映射。
但是,编译器会对代码进行一些相当高级的优化。根据 CPU 的需要,优化器可能会完全重新排序或删除一些具有条件跳转的代码块,并使用其他机制将其替换为产生相同结果的其他代码。