模板初阶(2):函数模板的匹配原则,类模板的实例化

简介: 模板初阶(2):函数模板的匹配原则,类模板的实例化

一、函数模板的匹配原则

int Add(const int& x, const int& y)
{
  return x + y;
}

template <class T>
T Add(const T& x, const T& y)
{
  return x + y;
}

int main()
{
  int a1 = 1, a2 = 2;
  Add(a1, a2);

  double d1 = 1.1, d2 = 2.2;
  Add(d1, d2);

  return 0;
}
  • 一个非模板函数可以和同名的函数模板同时存在。
  • 匹配原则:
  1. 匹配合适的情况下,编译器会优先调用非模板函数,而非通过模板实例化出一个新的函数。
  2. 如果模板能实例化出匹配更好的函数,则优先模板
  3. 普通函数支持隐式类型转换。


二、类模板的实例化

template <class T>
class Stack
{
public:
  Stack(int n = 4)
    :_top(0)
    ,_capacity(n)
  {
    cout << "Stack(int n = 4)" << endl;
    _a = new T[n];
  }

  ~Stack()
  {
    cout << "~Stack()" << endl;
    delete _a;
    _a = nullptr;
    _top = _capacity = 0;
  }

private:
  T* _a;
  int _top;
  int _capacity;
};


int main()
{
  Stack <int> s1;    // 1. 类名 <数据类型> 才是实例化类的类型
  Stack <double> s2; // 2. 显式实例化的类型不同,它们就是不同的类

  return 0;
}
相关文章
|
存储 Cloud Native Linux
C++ 深拷贝浅拷贝
C++ 深拷贝浅拷贝
|
存储 算法 程序员
【C++20 新特性 】模板参数包展开与Lambda初始化捕获详解
【C++20 新特性 】模板参数包展开与Lambda初始化捕获详解
812 3
|
缓存 编译器 程序员
【Qt 元对象系统04】 深入浅出Qt的QMetaObject:探索元对象的魔法
【Qt 元对象系统04】 深入浅出Qt的QMetaObject:探索元对象的魔法
1238 0
|
前端开发 安全 Java
全栈开发实战|​电子商务平台的设计与实现(Spring Boot + MyBatis + Thymeleaf)
全栈开发实战|​电子商务平台的设计与实现(Spring Boot + MyBatis + Thymeleaf)
3259 0
全栈开发实战|​电子商务平台的设计与实现(Spring Boot + MyBatis + Thymeleaf)
|
计算机视觉 Python
OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)
OpenCV中拆分通道、合并通道、alpha通道的讲解及实战演示(附python源码 超详细)
1146 0
|
存储
汇编语言中“$”的作用
汇编语言中“$”的作用
2419 0
汇编语言中“$”的作用
|
微服务
【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案
【Azure Cloud Services】云服务频繁发生服务器崩溃的排查方案
251 0
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
【10月更文挑战第31天】量子计算凭借其独特的量子比特和量子门技术,为大数据处理带来了革命性的变革。相比传统计算机,量子计算在计算效率、存储容量及并行处理能力上具有显著优势,能有效应对信息爆炸带来的挑战。本文探讨了量子计算如何通过量子叠加和纠缠等原理,加速数据处理过程,提升计算效率,特别是在金融、医疗和物流等领域中的具体应用案例,同时也指出了量子计算目前面临的挑战及其未来的发展方向。
|
存储
从源码角度分析Qt元对象系统1
从源码角度分析Qt元对象系统
224 0
|
安全 算法 程序员
【C++智能指针 空指针判断】深入探索C++智能指针:nullptr与empty的微妙差异
【C++智能指针 空指针判断】深入探索C++智能指针:nullptr与empty的微妙差异
650 1