2010-11-09 34 views
1

考慮以下結構和模板函數,每次使用具有不同值爲「num」的函數構建函數的新實例還是因爲const numbers<num> & nums參數是一個引用,並且將作爲指針實現,所有指針都使用不同的值「num」可以被定向到函數的一個實例?這裏爲這個模板函數生成不同的實例嗎?

template<size_t num>  
struct numbers{ 
public: 
    unsigned int nums[num]; 
}; 

template<size_t num> 
void print(const numbers<num> & nums,size_t size){ 
for (int i=0;i<size;i++) 
    cout <<nums.nums[i]<<' '; 
cout <<'\n'; 
} 

回答

4

就你(程序員)而言,print<2>()print<3>()是單獨的函數。雖然編譯器在理論上可以做出這種優化,但它可能不會在實踐中發生。找出肯定的最好方法是查看生成的彙編程序。

+0

_編譯器生成新實例是有意義的。 – Pooria 2010-11-11 08:25:36

3

是的,編譯器會爲每個num的情況生成函數。

1

是的,帶有一組新參數值的模板的每個實例化都是一個新函數。

相關問題