簡體   English   中英

通過 func(1) 和 func 調用重載模板 function<int> (1)導致結果不同</int>

[英]Calling overloading template function by func(1) and func<int>(1) leads to difference result

我有兩個模板函數:

template <typename T>   
void func(T a)
{ std::cout << "func(T a)" << std::endl; }


template <typename T>  
void func(int a)
{ std::cout << "func(int a)" << std::endl; }

而調用func不同的方法會導致不同的結果:

func(1);       // call func(T a)
func<int>(1);  // call func(int a)

這是演示 我原本認為func(1)func<int>(1)是相同的,但看來我錯了。 編譯器是否以不同方式對待func(1)func<int>(1) 謝謝你的幫助!

調用func<int>(1); 選擇第二個重載,因為它更專業。

調用func(1); 不能選擇第二個重載,因為第二個重載有一個模板參數T ,它既沒有明確地給出模板參數(如func<int>(1); ),也不能從 function 參數/參數對(因為第一個重載中的T可以從參數1T a參數)。 如果無法推導模板參數並且未明確給出,則重載在重載決策中是不可行的。 唯一剩下的過載是第一個,然后選擇它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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