当前位置: 首页 > news >正文

c++中模板的注意事项

1.  模板定义时,<>中的虚拟类型参数不能为空。(因为我们使用模板就是希望使用模拟类型代替其它的类型,如果我们不定义就没有意义了)

2.  无论是定义函数模板还是类模板,其实template定义与后面使用虚拟类型的类或者函数,是一条语句,也就是说,中间不能有;,但是可以写在一行,也可以分行写。

// 写在一行
template <typename T, typename T2> void printS(T& a, T2& b) {cout << a << endl;cout << b << endl;
}// 分行写
template <typename T, typename T2> 
void printS(T& a, T2& b) {cout << a << endl;cout << b << endl;
}

3.  所以说template其实就是说明下面的函数或者类要使用模板了,这也说明,如果一个函数中想要使用模板,就需要在前面使用template定义。(并不是只在代码中定义一次就行,只要使用就得定义)

4.  在函数模板中说道,函数的声明和函数的定义的前面都需要加template定义,此时我们在<>中的虚拟类型名应该保持一致。(因为表示的是同一个函数,自然相应的类型也应该相同了)

5. <> 中用于声明类型和传入类型,()中用于声明参数和传入参数。我们在使用模板时,就像传函数实参一样,使用<>传入类型实参,实例化声明的类型。

当然在调用函数模板的时候,编译器可以通过函数的参数(自动)实例化虚拟类型。 前提是,参数使用了对应的虚拟类型才行,否则还是得使用<>显示的传入

6. 如果子类和父类都是模板类,那么我们在子类继承父类的时候,可以使用子类的虚拟类型来实例化父类中的类型参数。

7.  我们在<>中定义虚拟类型的时候,也可以使用class,当然使用typename更好。 

 例如:  template <typename T>template <class T>都是可以的。

那么是为什么呢?   因为:  模板是c++后来提出的,最开始就使用了class来作为定义虚拟类型,后来为了和类区分,就新增了typename关键字来定义,所以两种都支持但是建议使用typename。

8.  我们将使用了模板的函数作为友元时,在调用函数时建议进行显示调用(调用时使用<>传入类型)

http://www.lryc.cn/news/306641.html

相关文章:

  • 【代码随想录python笔记整理】第十三课 · 链表的基础操作 1
  • JAVA工程师面试专题-《Mysql》篇
  • @ 代码随想录算法训练营第4周(C语言)|Day22(二叉树)
  • 福特锐界2021plus 汽车保养手册
  • c++进阶路线
  • python中的类与对象(2)
  • Android横竖屏切换configChanges=“screenSize|orientation“避免activity销毁重建,Kotlin
  • 【C语言基础】:操作符详解(二)
  • 模型训练基本结构
  • Redis 数据结构详解:底层实现与高效使用场景
  • Vue2:router-link的replace属性
  • 普中51单片机(DS18B20温度传感器)
  • 2.23C语言学习
  • origin/master master
  • 【数据结构】时间复杂度与空间复杂度
  • 分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
  • 【Git】Git命令的学习与总结
  • 前端工程化面试题 | 18.精选前端工程化高频面试题
  • 大公司的工程师是怎么废掉的...
  • 将yolov8权重文件转为onnx格式并在c#中使用
  • 在Spring Boot启动时禁止自动配置数据源相关的组件、@SpringBootApplication
  • 程序人生:不积跬步无以致千里
  • 通过二叉树例题深入理解递归问题
  • 【Android 协程常见用法】
  • python 进程笔记一 (概念+示例代码)
  • 各中间件数据库默认访问端口总结
  • 鲲鹏arm64架构下安装KubeSphere
  • python 函数-02-返回值注释格式
  • 【前端素材】推荐优质后台管理系统Upcube平台模板(附源码)
  • 可视化 RAG 数据 — 用于检索增强生成的 EDA