2012-02-21 223 views
1

現代C++編譯器(包括gcc)是否會優化以下(類宏)代碼?C++編譯器優化

template<typename F, typename ...A> 
    err foo(F fn, A&&... args) 
    { 
     return fn(std::forward<A>(args)...) ? get_last_error() : err(); 
    } 

例如,可以在優化下面的代碼

return foo(test, 5, 20, "bar"); 

到:

return test(5, 20, "bar") ? get_last_error() : err(); 
+3

試試看! 'gcc -O2 -S'是你的朋友。 – zwol 2012-02-21 16:21:17

+5

你在問現代編譯器是否能夠內聯..? – ildjarn 2012-02-21 16:23:40

+0

是的。使用可變參數模板參數內聯一個函數。 – 2012-02-21 16:33:11

回答

2

什麼你所描述的被稱爲「完美轉發」(這是谷歌如果術語你想深入瞭解它),並且C++ 11支持它,這要歸功於r值引用。所以答案是肯定的,它會得到完全優化。