Cpp模板-template、typename(一)

1、模板是类型安全的。

2、template<class T> 为了与定义类的class区分,用typename来定义类型参数。template<typename T>。T可以随便用其他占位符。

3、函数模板

template <typename T1, typename T2, ...> 返回类型 函数名(参数列表) {
    ...
}

模板参数名的作用域仅限于函数模板范围内,且每个模板参数要在函数的形参列表中至少出现一次。 可以定义函数的形参、返回值、局部变量等。

a.不允许template语句与函数模板定义之间有其他语句。

b.用模板创建模板函数、模板类时,编译器必须掌握函数模板/类成员函数模板的确切定义,必须把模板的声明和定义保存在同一文件中,通常保存在同一个头文件中

c.模板实例化过程中,不会进行任何形式的隐式类型转换。(可提前强制转换)

当编译器遇到函数模板的调用时,才会根据实参的具体类型,推断并确定模板参数的数据类型,并替换掉函数模板中的模板参数,生成函数代码 —— 模板的实例化。生成的函数 —— 模板函数。 

4、显示指定函数模板实例化的类型参数:

template<typename T>
T min(T a, T b) {
    ...
}

double a = 1.0;
float c = 2.0;

min<double>(a, c);

实际调用参数类型写在调用函数名后面的“< >”中。

5、可以typename与实际的类型混用

template<typename T, int n>
void Sort(T a[n]) {
    ...
}

template<typename T1>
void display(T&a, int n) {
    ...
}

在调用函数模板时,只能向飞类型模板参数传递常数,不能传递变量。 

int m = 7;
int a[] = {13,19,35,98,16,21,23};
Sort<int, m>(a); // error:模板中<typename T, int n>。m对于n,只能用常数。
display(a, m); // 正确。m对于int n。

 

——《C++面向对象程序设计(杜茂康)》C7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值