STL模板初识

  • 什么是泛型编程

编写与类型无关的逻辑代码,是代码复用的一种手段

  • 模板只是泛型编程的一种

1、函数模板代表了一个函数家族,与类型无关,调用的时候参数化,根据实参类型生成对应的参数模板

2、函数模板不是真正的函数,是给编译器制定了一种生成代码第的规则

3、在编译阶段-----》根据实参推演出参数类型-----》生成对应的函数模板

4、执行的时候调用的是生成的具体的函数而不是模板

5、不会做类型提升,除非显示指明

6、非模板函数可以和同名函数模板共存,并且函数模板可以被实例化成这个非模板函数(是两部分代码),执行的时候默认调用自己写的,除非告诉编译器必须使用推演生成的

7、模糊类型,就是将用与特定功能的函数中的类型信息模糊处理,这样产生的就是模板

  • 用法初识

#include <iostream>
using namespace std;

//template<typename T>	作用相同
//template<class T, class T1>
//声明T是一个类型
template<class T>

//模板函数
T Add(T left, T right)
{
	return left + right;
}

//同名非模板函数
int Add(int left, int right)
{
	return left + right;
}

int main()
{
	//下面都是隐式实例化,不会显式告诉编译器参数类型,让其自己推演
	cout << Add(1, 3) << endl;		//推演出整型类型函数
	//推演出来的函数和推演出来的一样,此处调用自己编写的明确类型函数
	cout << Add<>(1, 3) << endl;		//这样使用表示告诉编译器当有同名函数存在时也用推演生成的函数
	cout << Add(1.5, 2.0) << endl;		//。。。浮点数。。
	cout << Add('a', 'b') << endl;		//。。。字符类型。。
	cout << Add(1, '1') << endl;		//整数和字符类型
	cout << Add(1, (int)'1') << endl;	//相当于强转

	//下面是显示实例化,告诉编译器生成这个类型的函数
	cout << Add<int>(1, 3) << endl;
	cout << Add<int>(1, '1') << endl;

	return 0;
}

 

猜你喜欢

转载自blog.csdn.net/IronMan240/article/details/82284884