函数模板遇上函数重载

当函数模板的名称和普通函数的名称一样时,会发生函数重载。

 1 #include <iostream>
 2 using namespace std;
 3
 4 //函数模板
 5 template <typename T>
 6 void myfun(T& x,T& y)
 7 {
 8     cout<<"我是函数模板"<<endl;
 9 }
10
11 //普通函数
12 void myfun(int a,char c)
13 {
14     cout<<"我是普通函数"<<endl;
15 }
16
17 int main()
18 {
19     int x=10;
20     char y=‘Y‘;
21
22     myfun(x,y);//两个输入参数类型不一样,且与普通函数的输入类型一致,调用的是普通函数
23     myfun(y,x);//两个输入参数类型不一样,但与普通函数的输入类型不一致,调用的是普通函数,因为普通函数之间会有一个隐式的类型转换
24     myfun(x,x);//两个输入参数类型一样,调用的是函数模板,函数模板的本质是类型参数化,将严格按照类型匹配,不会进行自动类型转换
25
26     return 0;
27 }

原文地址:https://www.cnblogs.com/jswu-ustc/p/8508844.html

时间: 2024-10-14 04:30:19

函数模板遇上函数重载的相关文章

当函数模版遇上函数重载

demo 1 #include <iostream> using namespace std; //让 类型参数化 ===, 方便程序员进行编码 // 泛型编程 //template 告诉C++编译器 我要开始泛型编程了 .看到T, 不要随便报错 template <typename T> void myswap(T &a, T &b) { T c = 0; c = a; a = b; b = c; cout << "hello ....我是模

【C/C++学院】(11)泛型编程/函数模板/类模板

1.泛型编程基础 #include "iostream" using namespace std; void swap(int &a, int &b) { int c; c = a; a = b; b = c; } void swap(float &a, float &b) { float c; c = a; a = b; b = c; } void main() { int a = 1, b = 2; swap(a, b); float a1 = 1,

C++函数模板及实现原理

C++为我们提供了函数模板机制.所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数模板. 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可.在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能.     为什么要有函数模板     下面,我们就通过一个例子来说明为什么需要有函数模板. 需求:写n个函数,交换char类型.int类型.double类型变量的值. 如果

C++ Primer 学习笔记_86_模板与泛型编程 --重载与函数模板

模板与泛型编程 --重载与函数模板 引言: 函数模板可以重载:可以定义有相同名字但参数数目或类型不同的多个函数模板,也可以定义与函数模板有相同名字的普通非模板函数. 但是,声明一组重载函数模板不保证可以成功调用它们,重载的函数模板可能会导致二义性. 一.函数匹配与函数模板 如果重载函数中既有普通函数又有函数模板,确定函数调用的步骤如下: 1.为这个函数名建立候选函数集合,包括: a.与被调用函数名字相同的任意普通函数. b.任意函数模板实例化,在其中,模板实参推断发现了与调用中所用函数实参相匹配

泛型编程之函数模板

>模板的引入,为什么要使用模板? 在程序设计中往往存在这样一种现象:两个或多个函数的函数体完全相同,差别仅在于他们的参数类型不同,就需要分别给不同的数据类型定义不同的版本. 解决以上问题的一个比较好的方法就是使用模板.模板是实现代码重用机制的一种工具,他可以实现类型参数化,即把类型定义为参数,从而实现代码复用. >模板的分类: 模板分为函数模板和类模板.他们分别允许用户构造模板函数和模板类. >函数模板: 建立一个通用函数,其函数返回类型和形参类型不确定,用一个虚拟的类型来代表,这个通用

C++ Primer 学习笔记_86_模板与泛型编程 -满载与函数模板

模板与泛型编程 --重载与函数模板 引言: 函数模板可以重载:可以定义有相同名字但参数数目或类型不同的多个函数模板,也可以定义与函数模板有相同名字的普通非模板函数. 但是,声明一组重载函数模板不保证可以成功调用它们,重载的函数模板可能会导致二义性. 一.函数匹配与函数模板 如果重载函数中既有普通函数又有函数模板,确定函数调用的步骤如下: 1.为这个函数名建立候选函数集合,包括: a.与被调用函数名字相同的任意普通函数. b.任意函数模板实例化,在其中,模板实参推断发现了与调用中所用函数实参相匹配

C++中函数模板,显式具体化,显式实例化:

函数模板 形如: template<typename T>  //没有分号 void func(T &a,T &b); 称为函数模板,其中,template和typename为关键字,typename可以用class来替代.T(可以用其他的名称)表示一种泛型,既可以表示int型,也可以表示double或其他类型,将它想象成C++里面的数据类型的集合. 也就是说: void func(T &a,T &b)= void func(int &a,int &am

C++泛型编程之函数模板

泛型语义 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意.泛型编程的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C++中,目的是为了实现 C++的 STL(标准模板库).其语言支持机制就是模板(Templates). 模板的精神其实很简单:类型参数化(type parameterized),即,类型也是一种参数,也是一种静多态. 换句话说, 把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数. 函

C++--模板的概念和意义、深入理解函数模板、类模板的概念和意义

一.模板的概念与意义 Q:C++中有几种交换变量的方法?定义宏代码与定义函数A.定义宏代码优点:代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查B.定义函数优点:真正的函数调用,编译器对类型进行检查缺点:根据类型重复定义函数,无法代码复用 C.泛型编程--不考虑具体数据类型的编程方式Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型C++中的泛型编程函数模板--一种特殊的函数可用不同类型进行调用,看起来和普通函数很相似,区别是类型可被参数化函数模板的语法规则1.