C++ Array容器的显示和隐式实例化详细介绍

 更新时间:2022年10月19日 09:32:23   作者:Peak@  
这篇文章主要介绍了C++中Array容器的隐式实例化和显式实例化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

提到Array容器的隐式实例化和显式实例化,不得不先说说Array的类模板。

类模板自己本身并不是一个类型和对象,模板必须进行实例化,实例化分为隐式和显式两种。

隐式实例化:在需要一个完整定义类型的代码中,如果该类型是通过某个模板来提供,就会发生模板的隐式实例化。

显式实例化:常用在模板的接口与实现分离的场合,显式实例化效率较高。

下面创建了Array的类模板和实例化:

1、Array的类模板和隐式实例化

//arraytp.hpp
#pragma once
template<typename T, size_t N>
class Array
{
public:
	using size_type = size_t;
	//遍历array
	void traverse() {
		for (const auto& e : arr) {
			std::cout << e << ' ';
		}
		std::cout << '\n';
	}
	T& operator[](size_type i) {
		return arr[i];
	}
private:
	T arr[N];
};
// Arrytest.cpp
#include <iostream>
#include"arraytp.hpp"
int main()
{
    //定义一个长度为9的Array数组容器
    Array<int, 9> ia;
    //给ia赋值
    for (int  i = 0; i < 9; i++)
    {
        ia[i] = i;
    }
    //遍历ia
    ia.traverse();
    return 0;
}

运行结果:

2、Array类模板的接口和实现

显式实例化:

//arraytp.hpp
#pragma once
template<typename T, size_t N>
class Array
{
public:
	using size_type = size_t;
	void traverse();
	T& operator[](size_type i);
private:
	T arr[N];
};
//m1.cpp
#include<iostream>
#include<string>
#include "arraytp.hpp"
template<typename T,size_t N>
//遍历Array
void Array<T, N>::traverse() 
{
	for (const auto& e : arr) {
		std::cout << e << ' ';
	}
	std::cout << '\n';
}
template<typename T,size_t N>
T& Array<T, N>::operator[](size_type i) 
{
	return arr[i];
}
//在类模板中创建了三个显式类型
template class Array<int, 9>;
template class Array<double, 9>;
template class Array<std::string, 9>;
// ArryDisplay.cpp
#include <iostream>
#include"arraytp.hpp"
void assignment();
int main()
{
    assignment();
}
void assignment()
{
	//定义一个长度为9的Array数组容器
	Array<double, 9> ia;
	//给ia赋值
	for (int i = 0; i < 9; i++) {
		ia[i] = i;
	}
	//遍历
	ia.traverse();
}

运行结果:

在显式实例化中是将模板的接口和实现分离了,同时在模板的实现中又三个显式类型,显式实例化还可以减少编译时间和对象大小。

.hpp文件是.h头文件和.cpp源文件的结合,.h文件放声明,.cpp文件放实现,而.hpp文件就是将声明和实现放在一起。

size_t是标准C库中定义的,它是一个基本的与机器相关的无符号整数的C/C++类型。

参考书籍:Accelerated C++和Cpp_Primer_5

到此这篇关于C++ Array容器的显示和隐式实例化详细介绍的文章就介绍到这了,更多相关C++ Array容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现五子棋小游戏

    C++实现五子棋小游戏

    这篇文章主要为大家详细介绍了C++实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++笔记之std::future的用法小结

    C++笔记之std::future的用法小结

    std::future通常由某个Provider创建,与std::async一起使用,本文主要介绍了C++笔记之std::future的用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • C语言实现班级学生管理系统

    C语言实现班级学生管理系统

    这篇文章主要为大家详细介绍了C语言实现班级学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++判断pe文件实例

    C++判断pe文件实例

    这篇文章主要介绍了C++判断pe文件的方法,包含了文件操作的具体实现方法,具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C++小知识:尽可能使用枚举类

    C++小知识:尽可能使用枚举类

    今天小编就为大家分享一篇关于C++小知识:尽可能使用枚举类,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C++STL之string类的使用

    C++STL之string类的使用

    这篇文章主要为大家详细介绍了C++STL中的string类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Qt使用HTTP上传json格式数据

    Qt使用HTTP上传json格式数据

    这篇文章主要为大家详细介绍了Qt如何使用HTTP上传json格式数据,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-12-12
  • 探讨:C++中函数返回引用的注意事项

    探讨:C++中函数返回引用的注意事项

    本篇文章是对C++中函数返回引用的注意事项进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 从汇编看c++函数的默认参数的使用说明

    从汇编看c++函数的默认参数的使用说明

    本篇文章介绍了,在c++中函数的默认参数的使用说明分析。需要的朋友参考下
    2013-05-05
  • C数据结构之单链表详细示例分析

    C数据结构之单链表详细示例分析

    以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08

最新评论