我有一个功能
enum Limit {MIN, MAX};
inline int f(pair<int, int> p, Limit l)
{
return l == MIN ? p.first : p.second;
}
比较f(p, MIN)
和p.first
的计算时间,即使在发布版本中使用了一个好的编译器,第一个会慢吗?
答案 0 :(得分:1)
通过预测无法回答绩效问题。它完全取决于编译器能够进行的优化。
在这个人为的案例中:
#include <utility>
enum Limit {MIN, MAX};
inline int f(std::pair<int, int> p, Limit l)
{
return l == MIN ? p.first : p.second;
}
extern void emit(int);
int main()
{
auto p = std::make_pair(4, 5);
emit(f(p, MIN));
emit(p.first);
}
没有任何区别:
main: # @main
pushq %rax
movl $4, %edi
callq emit(int)
movl $4, %edi
callq emit(int)
xorl %eax, %eax
popq %rcx
retq