剛纔我正在學習函數模板,我想研究一下函數模板實例化的一些規則。所以我寫了下面的代碼:C++ - 函數模板實例化的規則
#include <iostream>
template <typename>
int check(int x) {
return x * 2;
}
int main() {
std::cout << check<double>(10) << std::endl; // #1
std::cout << check<>(10) << std::endl; // #2
std::cout << check(10) << std::endl; // #3
return 0;
}
的線#1,#2,#3不編譯都在一起,每一個嘗試,我離開只是其中之一和評論休息。 因此,當啓用#1時,我沒有編譯錯誤,並打印正確答案「20」。據我所知,「檢查<」double「>」調用模板實例化機制,因此「int check(int)」函數是真正創建的(模板參數的類型沒有任何影響)。 當#3啓用時,我有一個編譯錯誤「錯誤:沒有匹配函數調用'檢查(int)'」,這是合理的,因爲我試圖調用「check(int)」不存在的功能。我的問題是關於#2的情況:在這種情況下,我得到相同的「錯誤:沒有匹配函數調用'檢查(int)'」。不應該調用「檢查<」(10)「觸發器模板實例化機制以及?
「_S不應該調用」check <>(10)「觸發器模板實例化機制?_」你的問題的答案是:用什麼參數? – curiousguy