C++模板显式实例化,隐式实例化,特化(具体化,偏特化)辨析
来源:互联网 发布:奥鹏教师网络研修总结 编辑:程序博客网 时间:2024/05/20 05:04
最近再次看C++ PRIMER PLUS的时候看到这个部分感觉讲得很烂,前后口径不一致,所以写个辨析让自己明白的同时也希望对此不太清楚的朋友能搞懂。
总结一下,C++只有模板显式实例化(explicit instantiation),隐式实例化(implicit instantiation),特化(specialization,也译作具体化,偏特化)。首先考虑如下模板函数代码:
template <typename T>void swap(T &a, T &b){...}
1.隐式实例化
我们知道,模板函数不是真正的函数定义,他只是如其名提供一个模板,模板只有在运行时才会生成相应的实例,隐式实例化就是这种情况:
int main(){ .... swap<int>(a,b); ....}
它会在运行到这里的时候才生成相应的实例,很显然的影响效率
这里顺便提一下swap<int>(a,b);中的<int>是可选的,因为编译器可以根据函数参数类型自动进行判断,也就是说如果编译器不不能自动判断的时候这个就是必要的;
2.显式实例化
前面已经提到隐式实例化可能影响效率,所以需要提高效率的显式实例化,显式实例化在编译期间就会生成实例,方法如下:
template void swap<int>(int &a,int &b);
这样就不会影响运行时的效率,但编译时间随之增加。
3.特化
这个swap可以处理一些基本类型如long int double,但是如果想处理用户自定义的类型就不行了,特化就是为了解决这个问题而出现的:
template <> void swap<job>(job a,job b){...}其中job是用户定义的类型.
然后就没有了。
0 0
- C++模板显式实例化,隐式实例化,特化(具体化,偏特化)辨析
- 模板显式、隐式实例化和(偏)特化、具体化的详细分析
- 模板显式、隐式实例化和(偏)特化、具体化的详细分析
- 模板显式、隐式实例化和(偏)特化、具体化的详细分析
- 模板显式、隐式实例化和(偏)特化、具体化的详细分析
- 模板显式、隐式实例化和(偏)特化、具体化的详细分析
- 模板的特化,偏特化,实例化
- 模板的特化,偏特化,实例化
- 函数模板的实例化,显式特化,与显式模板实参.
- C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
- 模板化vs模板特化vs模板偏特化
- 函数与类 模板的实例化与特化
- c++ 模板、特化实例 code
- Linux C/C++ 模板:模板术语 模板参数/模板实参/模板名字/模板ID/特化/实例化
- 函数模板之隐式实例化、显式实例化、显式具体化
- C++函数模板的隐式实例化、显式实例化与显式具体化
- C++—模板特化和偏特化
- 【C++】模板类、特化以及偏特化!!!
- 最大子段和问题
- hibernate-mapping的各种属性配置
- iOS动态计算Label的size
- 设置Label的行间距
- Python Mock 资源汇总
- C++模板显式实例化,隐式实例化,特化(具体化,偏特化)辨析
- iOS Run项目报错 operation couldn’t be completed. (LaunchServicesError error 0.)
- 听说你又一次放弃了Dagger2,来听老夫说道说道
- enum与typedef enum的用法
- php代码优化
- VC2010动态库转换为静态库
- HDU2202
- mysql主从
- 洛谷[P1036]营救 并查集