Visual c ++,调试模式。
if(k>=0)
011D14CE cmp dword ptr [k],0
011D14D2 jl bez+28h (11D14D8h)
return true;
011D14D4 mov al,1
011D14D6 jmp bez+33h (11D14E3h)
return false;
011D14D8 xor al,al
011D14DA jmp bez+33h (11D14E3h)
并且代码相同:
return (k>=0)?(true):(false);
011D14DC cmp dword ptr [k],0
011D14E0 setge al
什么更快? 当我在函数调用中使用第二个构造时,什么更快?
if(i>0)
Foo(true);
else
Foo(false);
或者:
Foo((i>0)?(true):(false))
答案 0 :(得分:10)
在调试模式下编译时,该代码不相等。在第一个版本中,您可以在return true
分支上设置断点。 setge al
无法完成此操作。
答案 1 :(得分:1)
您正在查看的代码的输出是使用调试开关设置构建的。
编译器为每行源创建代码,以便调试和源跟踪,或多或少。
一个实例有4行代码。一个实例有一行代码。编译器相应地输出代码。
但是,您不会使用调试代码进行生产。您将使用优化来构建代码。
如果使用优化编译两个实例,我将看到完全相同的代码。