C++ Array容器的顯示和隱式實(shí)例化詳細(xì)介紹
提到Array容器的隱式實(shí)例化和顯式實(shí)例化,不得不先說說Array的類模板。
類模板自己本身并不是一個(gè)類型和對(duì)象,模板必須進(jìn)行實(shí)例化,實(shí)例化分為隱式和顯式兩種。
隱式實(shí)例化:在需要一個(gè)完整定義類型的代碼中,如果該類型是通過某個(gè)模板來提供,就會(huì)發(fā)生模板的隱式實(shí)例化。
顯式實(shí)例化:常用在模板的接口與實(shí)現(xiàn)分離的場(chǎng)合,顯式實(shí)例化效率較高。
下面創(chuàng)建了Array的類模板和實(shí)例化:
1、Array的類模板和隱式實(shí)例化
//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()
{
//定義一個(gè)長(zhǎng)度為9的Array數(shù)組容器
Array<int, 9> ia;
//給ia賦值
for (int i = 0; i < 9; i++)
{
ia[i] = i;
}
//遍歷ia
ia.traverse();
return 0;
}運(yùn)行結(jié)果:

2、Array類模板的接口和實(shí)現(xiàn)
顯式實(shí)例化:
//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];
}
//在類模板中創(chuàng)建了三個(gè)顯式類型
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()
{
//定義一個(gè)長(zhǎng)度為9的Array數(shù)組容器
Array<double, 9> ia;
//給ia賦值
for (int i = 0; i < 9; i++) {
ia[i] = i;
}
//遍歷
ia.traverse();
}運(yùn)行結(jié)果:

在顯式實(shí)例化中是將模板的接口和實(shí)現(xiàn)分離了,同時(shí)在模板的實(shí)現(xiàn)中又三個(gè)顯式類型,顯式實(shí)例化還可以減少編譯時(shí)間和對(duì)象大小。
.hpp文件是.h頭文件和.cpp源文件的結(jié)合,.h文件放聲明,.cpp文件放實(shí)現(xiàn),而.hpp文件就是將聲明和實(shí)現(xiàn)放在一起。
size_t是標(biāo)準(zhǔn)C庫中定義的,它是一個(gè)基本的與機(jī)器相關(guān)的無符號(hào)整數(shù)的C/C++類型。
參考書籍:Accelerated C++和Cpp_Primer_5
到此這篇關(guān)于C++ Array容器的顯示和隱式實(shí)例化詳細(xì)介紹的文章就介紹到這了,更多相關(guān)C++ Array容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)班級(jí)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)班級(jí)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
探討:C++中函數(shù)返回引用的注意事項(xiàng)
本篇文章是對(duì)C++中函數(shù)返回引用的注意事項(xiàng)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
從匯編看c++函數(shù)的默認(rèn)參數(shù)的使用說明
本篇文章介紹了,在c++中函數(shù)的默認(rèn)參數(shù)的使用說明分析。需要的朋友參考下2013-05-05
C數(shù)據(jù)結(jié)構(gòu)之單鏈表詳細(xì)示例分析
以下是對(duì)C語言中的單鏈表進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08

