在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C++ Templates读书笔记< 一 > 函数模版
* 并不是把模板编译成一个可以处理任何类型的单一实体,而是对于实例化模板参数的没种类型,都从模板产生出一个不同的实体。
* 具体类型代替模板参数的过程,叫做“实例化”
* 模板被编译了两次:
1。 实例化之前,检查模板本身的语法
2。 实例化期间,察看是否所有的调用都有效
* 函数模板内部,不能制定缺省的模板实参(类模板可以)。
* 函数模板的实参演绎:调用参数的类型构造自模板参数,所以模板参数和调用参数通常是相关的。
模板实参演绎并不适合返回类型。
* eg:
1 template< typename T1, typename T2 >
2 inline T1 max( T1 const& a, T2 const& b ) 3 { 4 return a < b ? b : a; 5 }
注:返回类型不能是引用。因为若返回T2类型实参,则T2需要转为T1,这个过程将会创建一个新的局部临时变量。
* 重载函数模版:
a> 一个非模板函数可以和一个同名的模版函数同时存在,并且该模板函数还可以被实例化为这个非模板函数。
b> 模板不允许自动类型转换,但普通非模板函数可以。
eg:
1 inline int const& max( int const& a, int const& b )
2 { 3 return a < b ? b : a; 4 } 5 6 template< typename T > 7 inline T const& max( T const& a, T const& b ) 8 { 9 return a < b ? b : a; 10 } 11 12 max( 7.0, 42.0 ); // 调用max<double> 13 max( 'a', 'b' ); // 调用max<char> 14 max( 7, 42 ); // 调用int重载的非函数模板 15 max<>( 7, 42 ); // 调用max<int> 上述 a> 16 max<double>( 7, 42 ); // 调用max<double> 没有实参演绎 17 max< 'a', 42.7 >; // 调用int重载的非函数模板 上述 b>
c> 函数的所有重载版本的声明都应该位于函数被调用的位置之前
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论