由於以下代碼中的函數模板是類模板的成員,因此如果不專門研究封閉類,則不能進行專門化。這是否完全模仿功能模板專業化?
但是,如果編譯器的完全優化開啓(假設Visual Studio 2010),下面代碼中的if-else語句是否會被優化?如果是這樣,這是不是意味着,對於所有實際目的而言,這是一個功能模板專業化而沒有任何性能成本?
template<typename T>
struct Holder
{
T data;
template<int Number>
void saveReciprocalOf();
};
template<typename T>
template<int Number>
void Holder<T>::saveReciprocalOf()
{
//Will this if-else-statement get completely optimized out
if(Number == 0) data = (T)0;
else data = (T)1/Number;
}
//-----------------------------------
void main()
{
Holder<float> holder;
holder.saveReciprocalOf<2>();
cout << holder.data << endl;
}
我發現當checked變量是編譯時間常量時,編譯器更有可能優化不必要的條件塊。但是,如果在使用常規函數參數時可能發生優化,那麼我認爲它沒有意義。 – zeroes00 2010-04-11 13:18:08
@ Zeroes00我推薦先編譯,然後看看程序集,如果你真的認爲它可能會影響性能。下面是一個令人印象深刻的優化編譯器的例子:http://stackoverflow.com/questions/2419650/cc-macro-template-blackmagic-to-generate-unique-name/2419715#2419715 – 2010-04-11 13:24:53