这篇文章主要介绍了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++ Array容器的显示和隐式实例化详细介绍


基础教程推荐
- C语言实现宾馆管理系统课程设计 2023-03-13
- C语言编程C++旋转字符操作串示例详解 2022-11-20
- C++实现ETW进行进程变动监控详解 2023-05-15
- centos 7 vscode cmake 编译c++工程 2023-09-17
- [C语言]二叉搜索树 2023-09-07
- 全面了解C语言 static 关键字 2023-03-26
- C++实战之二进制数据处理与封装 2023-05-29
- C语言 详解字符串基础 2023-03-27
- [c语言-函数]不定量参数 2023-09-08
- 带你深度走入C语言取整以及4种函数 2022-09-17