c++提供两种模板机制:函数模板和类模板
函数模板与普通函数区别:
函数模板不允许自动类型转化
普通函数能够自动进行类型转化
调用规则:
c++编译器优先考虑普通函数
可以通过空模板实参列表的语法限定编译器只能通过模板匹配
函数模板可以像普通函数那样可以被重载
如果函数模板可以产生一个更好的匹配,那么选择模板
函数模板实现机制:
编译器并不是把函数模板处理成能够处理任何类型的函数
函数模板通过具体类型产生不同的函数
编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
具体化函数模板:
第三代具体化,显示具体化的原型和定意思以template<>开头,并通过名称来指出类型
具体化优先于常规模板
template<>void mySwap(Person &p1, Person &p2){}
类模板和函数模板的定义和使用类似,我们已经进行了介绍。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。
全特化(特例化) 部分特例化(偏特化)
模板特例化原因: 对特定类型特定知识,提高效率
全特化条件:1 必须有一个主模板,2 然后模板类型全部实例化
函数模板只有全特化, 偏特化可以通过函数重载完成
类模板既有全特化 也有偏特化
调用顺序:全特化类 > 偏特化类 > 主模板类
类型推导 auto、decltype和decltype(auto)的用法
1.auto
//普通;类型 正常
//const类型
//引用和指针类型
2. decltype
3. delctype(auto) c++14
nullptr和NULL的区别
右值引用
范围for循环
lambada表达式
列表初始化:{}内 精度降低会编译报错
并发
【智能指针】