函數模板和普通函數同時出現是的調用規則

函數模板不允許類型自動轉換

普通函數可以進行自動類型轉換

總結:

1.函數模板可以向普通函數那樣被重載

2.C++編譯器優先考慮使用普通函數

3.如果函數模板能產生更好的匹配,則使用模板函數

4.可以通過空模板實參列表的語法限定編譯器選擇只通過模板函數調用

#pragma warning(disable : 4996)
#include <iostream>
using namespace std;

int Max(int a, int b)
{
	cout << "普通函數" << endl;
	return a < b ? b : a;
}

template <typename T>
T Max(T a, T b)
{
	cout << "模板函數" << endl;
	return a < b ? b : a;
}

template <typename T>
T Max(T a, T b, T c)
{
	cout << "模板函數" << endl;
	return Max(Max(a, b), c);
}

int main()
{
	int a = 10;
	int b = 20;
	char c = 'w';

	//當函數模板和普通函數都符合調用時,優先調用普通函數
	cout << Max(a, b) << endl;

	//如顯示使用函數模板,則使用<>類型列表
	cout << Max<>(a, b) << endl;
	//如果函數模板產生更好的匹配 使用函數模板
	cout << Max(2.0, 5.0) << endl;
	//重載
	cout << Max(1.0, 3.0, 4.0) << endl;
	//調用普通函數 隱式類型轉換
	cout << Max(a, c) << endl;


	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章