C++回顾(十四)—— 函数模板
创始人
2024-05-31 08:32:20
0

14.1 概述

  • 所谓函数模板(function template),实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。
  • 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。

14.2 函数模板语法

14.2.1 定义

在这里插入图片描述
在这里插入图片描述

14.2.2 调用

(1)隐式调用(自动类型推导)

(2)显式调用(指定类型)

在这里插入图片描述
示例代码:

#include using namespace std;/*
int add(int x, int y)
{return x + y;
}double add(double x, double y)
{return x + y;
}*/template     //声明虚拟类型T(作用域只局限于下面紧跟的一个函数)
T add(T x, T y)
{return x + y;
}template 
void show(T x)
{cout << x << endl;
}template 
void print(T1 x, T2 y)
{cout << x << y << endl;
}int main()
{cout << add(1, 2) << endl;       //隐式调用(自动数据类型推导)cout << add(1.11, 2.22) << endl;cout << add(1, 'a') << endl;   //显示调用(指定转换为int类型)cout << add(1, 'a') << endl;   //显示调用(指定转换为char类型)print(1, 'a');print(1.11, 'a');show(1);return 0;
}

运行结果:
在这里插入图片描述

14.3 函数模板遇上函数重载

14.3.1 函数模板和普通函数区别

  • 函数模板不允许自动类型转化
  • 普通函数能够进行自动类型转换

14.3.2 函数模板和普通函数在一起调用规则

  • 1 函数模板可以像普通函数一样被重载
  • 2 C++编译器优先考虑普通函数
  • 3 如果函数模板可以产生一个更好的匹配,那么选择模板
  • 4 可以通过空模板实参列表的语法限定编译器只通过模板匹配

注意:普通函数和模板函数同时存在,优先调用普通函数

示例代码:

#include using namespace std;int add(int x, int y)
{cout << "普通函数" << endl;return x + y;
}template 
T add(T x, T y)
{cout << "模板函数" << endl;return x + y;
}template 
void show(T x, T y)
{cout << x << y << endl;
}int main()
{cout << add(1, 'a') << endl;   //普通函数可以进行默认类型转换show(1, 'a');             //模板函数没有默认的类型转换add(1, 2);                     //普通函数和模板函数同时存在,优先调用普通函数return 0;
}

运行结果:
在这里插入图片描述

14.4 函数模板机制

  • 编译器并不是把函数模板处理成能够处理任意类的函数
  • 编译器从函数模板通过具体类型产生不同的函数
  • 编译器会对函数模板进行两次编译
  • 在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译。

相关内容

热门资讯

永远会用安卓系统的手机 亲爱的手机控们,你是否也有那么一款手机,它陪伴你度过了无数个日夜,成为了你生活中不可或缺的一部分?没...
安卓系统怎么添加公众号,安卓系... 你是不是也和我一样,对安卓手机上的公众号情有独钟呢?想要把那些有趣的公众号添加到手机里,随时随地都能...
仿苹果系统怎么改回安卓系统,轻... 你是不是也和我一样,曾经被苹果系统的魅力所吸引,然后不小心把手机换成了安卓呢?现在,突然发现安卓的某...
oppor11plus安卓系统... 你有没有注意到,最近手机圈里又掀起了一股热潮?没错,就是OPPO R11 Plus这款手机。这款手机...
安卓系统重新洗牌教程,从重新洗... 你有没有发现,安卓系统最近好像经历了一场大洗牌?别急,别急,让我来给你详细介绍一下这个安卓系统重新洗...
安卓12系统改画质,尽享极致流... 你有没有发现,最近你的安卓手机好像变得不一样了?没错,就是那个神秘的安卓12系统,它悄悄地给你带来了...
小米11系统是安卓几,探索新一... 你有没有发现,最近小米11这款手机在市场上可是火得一塌糊涂呢!那么,问题来了,小米11的系统是安卓几...
安卓版系统下载安装 你有没有想过,为什么你的手机总是那么卡,那么慢?别急,今天就来给你揭秘,如何让你的安卓手机焕然一新,...
安卓换苹果系统更新多久,体验无... 你有没有想过,当你把心爱的安卓手机换成苹果,那系统更新到底要等多久呢?这可是不少人在换机时都会关心的...
如何升级华为的安卓系统,轻松提... 亲爱的手机控们,你是不是也和我一样,对华为的安卓系统充满了好奇和期待?想要让你的华为手机焕然一新,体...
好用系统插件推荐安卓手机,提升... 你有没有发现,手机用久了,是不是觉得有点力不从心?别急,今天就来给你安利一波好用系统插件,让你的安卓...
x3鸿蒙系统和安卓系统,探索x... 你知道吗?最近手机圈里可是热闹非凡呢!各大品牌纷纷推出新机,而其中最引人注目的莫过于华为的新操作系统...
安卓系统优化手机软件,打造流畅... 你有没有发现,你的安卓手机最近变得有点“慢吞吞”的?别急,别急,今天就来给你支几招,让你的安卓手机焕...
安卓车机系统显示歌词,打造沉浸... 亲爱的车友们,你是否在驾驶过程中,被那美妙的旋律和歌词所吸引,却又因为无法专注于路面而感到困扰?别担...
安卓系统硬件是否损坏 手机突然卡顿,屏幕闪烁不定,是不是安卓系统的硬件出了问题?别急,今天就来给你详细剖析一下安卓系统硬件...
3310安卓4g系统,智能升级 你有没有听说过3310安卓4G系统?这可是最近科技圈里的小热门呢!想象一个经典的诺基亚3310,竟然...
小米用的安卓系统吗,引领智能生... 你有没有想过,那个你每天不离手的手机,它的操作系统到底是谁家的“孩子”?今天,咱们就来聊聊这个话题—...
安卓系统厉害的游戏,盘点那些令... 你有没有发现,安卓系统上的游戏真的是越来越厉害了?没错,我就要给你好好盘点一下那些让人欲罢不能的安卓...
安卓手机系统提有声音,唤醒你的... 你有没有发现,最近你的安卓手机系统突然变得特别贴心呢?没错,就是那个一直默默陪伴你的小家伙,现在竟然...
安卓9系统设置密码破解,轻松应... 你有没有遇到过这种情况:手机里装了安卓9系统,不小心设置了密码,结果现在想找回数据,却因为密码而头疼...