簡體   English   中英

模板是否針對相同類型的參數實例化多次?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM