【发布时间】:2012-06-30 17:38:26
【问题描述】:
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))
?
【问题讨论】:
-
如果你在调试模式下编译,那么编译器不会进行优化,所以这是一个毫无意义的比较......
-
理论上应该没有区别,因为无论如何编译器都必须对其进行优化。在实践中,这取决于编译器。
-
谁告诉你两个代码是相等的,尤其是在调试配置中,应用了
/Od(没有优化)。 -
(k>=0)?(true):(false)是否有意义,为什么不简单地使用k>=0 -
@Vprimachenko 没有意义,例如这段代码。
标签: c++ performance visual-c++ optimization assembly