C++(模板及函数模板)
2021/8/5 1:06:40
本文主要是介绍C++(模板及函数模板),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
学习黑马视频后复习模板知识点,参考(1条消息) 《黑马》——C++提高编程_漏网小鱼的博客-CSDN博客,若侵权,请告知,会删。
- 模板的概念
- 函数模板的基本语法
- 函数模板注意事项
- 普通函数和函数模板区别
- 普通函数和函数模板调用规则
- 模板的局限性
1、模板的概念
模板即建立的通用的模具,大大的提高了复用性
特点:
- 模板不可以直接使用,它为一个框架
- 模板不是万能的
C++的一种编程思想即泛型编程,主要使用模板
两种模板机制:函数模板和类模板
template<typename T>
函数声明或定义/类
template :声明创建模板
typename : 表面后边跟着的符号为一种函数类型,可以用class代替
T :通用的数据类型
2、函数模板的基本语法
使用如下:
template<typename T> void mySwap(T& a,T& b) { T& temp = a; a = b; b = temp; } int main() { int a = 10; int b = 20; //1 自动类型推导 mySwap(a,b); //2 显示指定类型 mySwap<int>(a,b); }
函数模板两种调用方法:
- 自动类型推导 : 函数(参数列表)
- 显示指定类型 : 函数<数据类型>(参数列表)
3、函数模板注意事项
自动类型推导必须推导出一致的数据类型T才可以使用
模板必须要确定出T的数据类型,才可以使用
建议使用显示指定方式调用函数模板
4、普通函数和函数模板的区别
普通函数调用时可以发生自动类型转换(隐式类型转换)。
函数模板调用时,如果采用自动类型推导不会发生隐式类型转换,因为T分不清到底是哪种类型
函数模板调用时,如果采用显示指定方式可以发生隐式类型转换。
如:
int a = 10;
int b = 20;
char c = 'c' ;
myAdd(a,c);//普通函数可以发生隐式类型转换,即char转换成int类型
//myAdd1(a,c);//函数模板调用时,采用自动类型推导,不会发生隐式类型转换,程序报错
没有Add<int>(a,c);//函数模板调用采用显示类型转换,可以发生隐式类型转换
5、普通函数和函数模板调用规则
- 当普通函数和函数模板都可以调用时,优先调用普通函数
- 可以通过空模板参数列表来强制调用函数模板,如:myPrint<>(a,b),空模板列表即<>
- 函数模板也可以发生重载
- 如果函数模板可以更好的匹配,优先调用函数模板
6、模板的局限性
当数据类型为自定义数据类型,如Person时,当比较两个Person类型的数据时,可以通过运算符重载,但是不太方便,还有另一种为特定的数据类型提供具体化模板
具体化模板:
显示具体化的原型和定义以template<> 开头,并指出具体类型
template<> bool myCompare(Person& p1,Person& p2) {}
具体化优于常规模板
这篇关于C++(模板及函数模板)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26怎么使用nsenter命令进入容器?-icode9专业技术文章分享
- 2024-12-26导入文件提示存在乱码,请确定使用的是UTF-8编码怎么解决?-icode9专业技术文章分享
- 2024-12-26csv文件怎么设置编码?-icode9专业技术文章分享
- 2024-12-25TypeScript基础知识详解
- 2024-12-25安卓NDK 是什么?-icode9专业技术文章分享
- 2024-12-25caddy 可以定义日志到 文件吗?-icode9专业技术文章分享
- 2024-12-25wordfence如何设置密码规则?-icode9专业技术文章分享
- 2024-12-25有哪些方法可以实现 DLL 文件路径的管理?-icode9专业技术文章分享
- 2024-12-25错误信息 "At least one element in the source array could not be cast down to the destination array-icode9专业技术文章分享
- 2024-12-25'flutter' 不是内部或外部命令,也不是可运行的程序 或批处理文件。错误信息提示什么意思?-icode9专业技术文章分享