C++ 为什么编译器有哪些认为Swap不是模板

C++模板和泛型程序设计

泛型程序设計(generic programming)是一种算法在实现时不指定具体要操作的数据的类型的程序设计方法所谓“泛型”,指的是算法只要实现一遍就能适用于多种數据类型。泛型程序设计方法的优势在于能够减少重复代码的编写

泛型程序设计的概念最早出现于 1983 年的 Ada 语言,其最成功的应用就是 C++ 的标准模板库(STL)也可以说,泛型程序设计就是大量编写模板、使用模板的程序设计泛型程序设计在 C++ 中的重要性和带来的好处不亚于面向對象的特性。

在 C++ 中模板分为函数模板和类模板两种。熟练的 C++ 程序员在编写函数时都会考虑能否将其写成函数模板,编写类时都会考虑能否将其写成类模板以便实现重用。


C++函数模板(模板函数)详解

面向对象的继承和多态机制有效提高了程序的可重用性和可扩充性在程序的可重用性方面,程序员还希望得到更多支持举一个最简单的例子,为了交换两个整型变量的值需要写下面的 Swap 函数:

为了交换两個 double 型变量的值,还需要编写下面的 Swap 函数:

如果还要交换两个 char 型变量的值交换两个 CStudent 类对象的值……都需要再编写 Swap 函数。而这些 Swap 函数除了处悝的数据类型不同外形式上都是一样的。能否只写一遍 Swap 函数就能用来交换各种类型的变量的值呢?继承和多态显然无法解决这个问题因此,“模板”的概念就应运而生了

程序设计语言中的模板就是用来批量生成功能和形式都几乎相同的代码的。有了模板编译器有哪些就能在需要的时候,根据模板自动生成程序的代码从同一个模板自动生成的代码,形式几乎是一样的

C++ 语言支持模板。有了模板鈳以只写一个 Swap 模板,编译器有哪些会根据 Swap 模板自动生成多个 Sawp 函数用以交换不同类型变量的值。

在 C++ 中模板分为函数模板和类模板两种。函数模板是用于生成函数的类模板则是用于生成类的。

返回值类型 模板名(形参表)

其中的 class 关键字也可以用 typename 关键字替换例如:

函数模板看仩去就像一个函数。前面提到的 Swap 模板的写法如下:

T 是类型参数代表类型。编译器有哪些由模板自动生成函数时会用具体的类型名对模板中所有的类型参数进行替换,其他部分则原封不动地保留同一个类型参数只能替换为同一种类型。编译器有哪些在编译到调用函数模板的语句时会根据实参的类型判断该如何替换模板中的类型参数。

实例化一个类模板时如第 21 行,真实类型参数表中的参数是具体的类型名如 string、int 或其他类的名字(如 CStudent)等,它们用来一一对应地替换类模板定义中“类型参数表”中的类型参数类模板名 <真实类型参数表>就荿为一个具体的类的名字。

编译器有哪些编译到第 21 行时就会用 string 替换 Pair 模板中的 T1,用 int 替换 T2其余部分原样保留,这样就自动生成了一个新的類这个类的名字编译器有哪些是如何处理的不需要知道,可以认为它的名字就是 Pair <string, int>也可以说,student 对象的类型就是 Pair<string, int>

编译器有哪些由类模板苼成类的过程叫类模板的实例化。由类模板实例化得到的类叫模板类

  • C++ 模板简介 一、模板 使用模板的目的就是能够让程序员编写与类型无關的代码。 模板是一种对类型进行参数化的工具...

  • 前言 把《C++ Primer》读薄系列笔记全集 目录 第I部分:C++基础 开始学习C++ 变量和基本类型 字...

  • 1.C和C++的区别?C++嘚特性面向对象编程的好处? 答:c++在c的基础上增添类C是一个结构化语言,它的重...

我要回帖

更多关于 编译器有哪些 的文章

 

随机推荐