// ============================================================================ // p1c05_03 — 5.4 函数模板和普通函数在一起调用规则 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; // --- 原文片段 [58954472:2] 5.4 函数模板和普通函数在一起调用规则 --- //函数模板 template T MyPlus_1(T a, T b){ T ret = a + b; return ret; } //普通函数 int MyPlus_1(int a, int b){ int ret = a + b; return ret; } void test03(){ int a = 10; int b = 20; char c = 'a'; char d = 'b'; //如果函数模板和普通函数都能匹配,c++编译器优先考虑普通函数 cout << MyPlus_1(a, b) << endl; //如果我必须要调用函数模板,那么怎么办? cout << MyPlus_1<>(a, b) << endl; //此时普通函数也可以匹配,因为普通函数可以自动类型转换 //但是此时函数模板能够有更好的匹配 //如果函数模板可以产生一个更好的匹配,那么选择模板 cout << MyPlus_1(c,d); } //函数模板重载 template T MyPlus_1(T a, T b, T c){ T ret = a + b + c; return ret; } void test04(){ int a = 10; int b = 20; int c = 30; cout << MyPlus_1(a, b, c) << endl; //如果函数模板和普通函数都能匹配,c++编译器优先考虑普通函数 } // --- main --- int main() { test03(); test04(); return 0; }