[英]callback function: difference between void(*func)(int) and void(func)(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
可以從參數1
到T a
參數)。 如果無法推導模板參數並且未明確給出,則重載在重載決策中是不可行的。 唯一剩下的過載是第一個,然后選擇它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.