[英]Does template instantiate multiple times for same type of parameter?
這是我的代碼來解釋這個問題:
template<typename T>
void get_data(T data)
{
cout << "got me" << data << endl;
}
int main()
{
get_data(10);
get_data(20);
}
在這段代碼中,當調用get_data(20)
時,在調用get_data(10)
時已經存在int
的代碼擴展。 那么,它將再次擴展相同數據類型的代碼還是使用擴展的代碼? 請解釋。
實例化將在同一編譯單元中進行。 除了浪費之外,使用相同類型的雙模板實例化還會導致違反ODR(一個定義規則)的問題-如果您具有2個相同的函數,您(或編譯器)將如何知道每次使用哪個?
對於不同的編譯單元,模板可能會在每個單元中獨立實例化。 在鏈接階段,將放棄其中一種實現方式(或導致鏈接錯誤,具體取決於鏈接器及其配置)。
模板在編譯期間進行了擴展,以包含所需的變體。 在這種情況下,只需要構建一個int
版本的get_data
函數,它將用於兩個調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.