IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++显式实例化,隐式实例化,显式具体化 -> 正文阅读

[C++知识库]C++显式实例化,隐式实例化,显式具体化

一、隐式实例化

? ? ? ? ?以下为一个简单的模板函数,例如传入的两个实参分别为int int 或者double double 时,都可执行。而实际上,函数模板只是实现函数的一种方法,并非实际的实例函数,例如当main函数中执行以下两个函数时?pt(1,2); pt(1.2,2.3);

? ? ? ? 实际上会实例化两个函数,它们的T分别为int 和double,这是编译器帮我们做的工作,因此使用模板函数并不会缩短可执行程序,只是方便了我们对代码的编写。

? ? ? ? 话说回来,什么是隐式实例化呢,pt(1,2)这个过程就是一个隐式实例化的过程,它实例化生成了一个T为int的函数。因此我们得知,隐式实例化实际上就是模板函数根据传入的实参类型实例化一个函数的过程。

//1、模板函数
template <class T>
void pt(T a,T b)
{
    T c = a + b;
    cout << c << endl;
}

?二、显式实例化

? ? ? ? 上面就是隐式实例化的过程,那么显式实例化是一个什么过程呢。

? ? ? ? 对,你猜的没错,实际上就是我们显式地写明了是何种类型

//2、显式实例化
template void pt<int> ( int a, int b);

? ? ? ? 那你可能要问了,既然编译器自己能通过输入的实参判断来实例化这个函数模板,为什么我要自己去实例化一个呢。

? ? ? ? 优点:1、编辑时可检查,出现错误能够及时修改

? ? ? ? ? ? ? ? ? ?2、编译速度变快(我也不知道这点时间有何用。。)

三、显示具体化

? ? ? ? 这里出现了一个与之前不同的词,具体化?而非实例化。所谓具体化,是指我对此函数做出的具体的定义。注意:具体化需要给出函数的具体实现。通过以下例子将说明。

#include<iostream>
using namespace std;

//1、模板函数
template <class T>
void pt(T a,T b)
{
    T c = a + b;
    cout << c << endl;
}
//2、显式实例化
template void pt<int> ( int a, int b);
//3、显示具体化
template <> void pt<double>(double a, double b)
{
    double c = a + b;
    cout << c << endl;
    cout << "haha" << endl;
}
int main()
{
    double a = 1.0, b = 2.2;
    pt(a, b);

    return 0;

}

????????在main函数之上有三个函数,一个是模板函数,一个是显式实例化为int类型的pt,第三个就是具体化函数。

? ? ? ? 在main函数中定义了double类型的a和b。那么调用pt时,会出现什么结果呢?注意模板函数和具体化函数实现的区别,具体化的pt还会输出haha。

? ? ? ? ? ? ?

? ? ? ? ?没错,调用的就是我们具体化的pt,还输出了haha。

四、总结

? ? ? ? 根据以上例子我们明白了实例化以及具体化的区别,并且发现具体化的函数优先于模板函数。以下为总结。

? ? ? ?对于第三代具体化,C++98标准选用了下面的方法?

·? ? ? ? 对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及他们的重载版本。

·? ? ? ? 显示具体化的原型和定义应以template<>打头,并通过名称支出类型

·? ? ? ? 具体化优先于常规模板,而非模板函数优先于具体化和常规模板

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:38:17  更:2021-12-08 13:38:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:32:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码