2016-09-21 31 views
0

我有一個函數參數預先知道時的性能比較?

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的computatinal時間,是第一位的更慢,在發行版編譯好?

+2

所以你建立與優化啓用?如果你向編譯器提示該函數可以使用'inline',是否有區別? 「constexpr」怎麼樣? 「慢」是什麼意思?你如何衡量?有什麼不同? –

+1

如果參數在編譯時已知,那麼使用'constexpr'函數可能是個好主意。 –

+0

你如何衡量表現和有什麼不同? f(p,MIN)包括p.first,所以自然需要更多時間。 –

回答

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