1. 程式人生 > 其它 >c++普通函式與函式模板的呼叫規則

c++普通函式與函式模板的呼叫規則

普通函式與函式模板的呼叫規則

呼叫規則如下:

  1. 如果函式模板和普通函式都可以實現,優先呼叫普通函式
  2. 可以通過空模板引數列表來強制呼叫函式模板
  3. 函式模板也可以發生過載
  4. 如果函式模板可以產生更好的匹配,優先呼叫函式模板

示例: 

//普通函式與函式模板呼叫規則
void myPrint(int a, int b)
{
    cout << "呼叫的普通函式" << endl;
}

template<typename T>
void myPrint(T a, T b)
{
    cout << "呼叫的模板" << endl;
}

template
<typename T> void myPrint(T a, T b, T c) { cout << "呼叫過載的模板" << endl; } void test01() { //1、如果函式模板和普通函式都可以實現,優先呼叫普通函式 // 注意 如果告訴編譯器 普通函式是有的,但只是宣告沒有實現,或者不在當前檔案內實現,就會報錯找不到 int a = 10; int b = 20; myPrint(a, b); //呼叫普通函式 //2、可以通過空模板引數列表來強制呼叫函式模板 myPrint<>(a, b); //
呼叫函式模板 myPrint<int>(a, b); //呼叫函式模板 這種也可以 //3、函式模板也可以發生過載 int c = 30; myPrint(a, b, c); //呼叫過載的函式模板 //4、 如果函式模板可以產生更好的匹配,優先呼叫函式模板 char c1 = 'a'; char c2 = 'b'; myPrint(c1, c2); //呼叫函式模板 } int main() { test01(); system("pause"); return 0; }

總結:既然提供了函式模板,最好就不要提供普通函式,否則容易出現二義性