中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

醫(yī)院網(wǎng)站建設(shè)的資料2022年十大網(wǎng)絡(luò)流行語發(fā)布

醫(yī)院網(wǎng)站建設(shè)的資料,2022年十大網(wǎng)絡(luò)流行語發(fā)布,抖音如何推廣引流,中濟(jì)建設(shè)有限公司網(wǎng)站一、非類型模版參數(shù) 模板參數(shù)分類型形參與非類型形參。 類型形參:出現(xiàn)在模板參數(shù)列表中,跟在class或者typename之后的參數(shù)類型名稱。非類型形參:就是用一個常量作為類(函數(shù))模板的一個參數(shù),在類(函數(shù))模板中可將該參數(shù)當(dāng)成常量來…

一、非類型模版參數(shù)

  1. 模板參數(shù)分類型形參與非類型形參。
    • 類型形參:出現(xiàn)在模板參數(shù)列表中,跟在class或者typename之后的參數(shù)類型名稱。
    • 非類型形參:就是用一個常量作為類(函數(shù))模板的一個參數(shù),在類(函數(shù))模板中可將該參數(shù)當(dāng)成常量來使用。
  2. C++11新增了array容器,array實際上就是模板類型的靜態(tài)數(shù)組:
//array的部分底層實現(xiàn)等效于以下代碼:
template<class T, size_t N = 10> //不管是類型參數(shù)還是非類型參數(shù)都可以給默認(rèn)值
class array
{
public:T& operator[](size_t index){assert(index < _size); //會對訪問范圍進(jìn)行檢查return _array[index];}const T& operator[](size_t index)const{assert(index < _size);return _array[index];}size_t size()const{return _size;}bool empty()const{return 0 == _size;}
private:T _array[N]; //靜態(tài)數(shù)組size_t _size = N;
}

array VS 普通數(shù)組

  • array對比普通數(shù)組的優(yōu)勢在于:array對訪問范圍進(jìn)行嚴(yán)格的檢查,基本不會出現(xiàn)越界訪問的問題。

  • 而普通數(shù)組只對范圍后的部分空間進(jìn)行抽查;且只檢查越界寫,不檢查越界讀;

#include <iostream>    
#include <array>    
using namespace std;    int main()    
{    array<int, 10> a1;    //a1[10];  //嚴(yán)格檢查,運(yùn)行崩潰    //a1[15];  //嚴(yán)格檢查,運(yùn)行崩潰  int a2[10];cout << a2[10] << endl;   //越界讀,正常運(yùn)行 cout << a2[15] << endl;   //越界讀,正常運(yùn)行 //a2[10] = 1;  //越界寫,部分抽查,運(yùn)行崩潰  a2[20] = 1; //越界寫,部分抽查,正常運(yùn)行  cout << a2[20] << endl;                                                    
}

注意:

  1. 浮點(diǎn)數(shù)、類對象以及字符串是不允許作為非類型模板參數(shù)的。

  2. 非類型模板參數(shù)必須傳常量(const變量也行),不能傳變量。

  3. 非類型的模板參數(shù)必須在編譯期就能確認(rèn)結(jié)果。


二、模版的特化

2.1 概念

模版的特化,即在原模板類的基礎(chǔ)上針對特殊類型所進(jìn)行特殊化的實現(xiàn)方式。

模板特化中分為函數(shù)模板特化與類模板特化。

2.2 函數(shù)模版的特化

函數(shù)模板的特化步驟:

  1. 必須要先有一個基礎(chǔ)的函數(shù)模板
  2. 關(guān)鍵字template后面接一對空的尖括號<>
  3. 函數(shù)名后跟一對尖括號,尖括號中指定需要特化的類型
  4. 函數(shù)形參表: 必須要和模板函數(shù)的基礎(chǔ)參數(shù)類型完全相同,如果不同編譯器可能會報一些奇怪的錯誤。
//1. 基礎(chǔ)函數(shù)模板 -- 參數(shù)匹配
template<class T>
bool Less(T left, T right)
{return left < right;
}// 對Less函數(shù)模板進(jìn)行特化
template<> //2.
bool Less<Date*>(Date* left, Date* right) //3.4.
{return *left < *right;
}
int main()
{cout << Less(1, 2) << endl;Date d1(2022, 7, 7);Date d2(2022, 7, 8);cout << Less(d1, d2) << endl;Date* p1 = &d1;Date* p2 = &d2;cout << Less(p1, p2) << endl; // 調(diào)用特化之后的版本,而不走模板生成了return 0;
}

注意:一般情況下如果函數(shù)模板遇到不能處理或者處理有誤的類型,為了實現(xiàn)簡單通常都是將該函數(shù)直接給出。該種實現(xiàn)簡單明了,代碼的可讀性高,容易書寫。因為對于一些參數(shù)類型復(fù)雜的函數(shù)模板,特化時比較復(fù)雜,因此函數(shù)模板不建議特化。

2.3 類模版的特化

2.3.1 全特化

全特化即是將模板參數(shù)列表中所有的參數(shù)都確定化。

template<class T1, class T2> //基礎(chǔ)模版
class Data
{
public:Data() {cout<<"Data<T1, T2>" <<endl;}
private:T1 _d1;T2 _d2;
};template<>
class Data<int, char> //全特化模版
{
public:Data() {cout<<"Data<int, char>" <<endl;}
private:int _d1;char _d2;
};void TestVector()
{Data<int, int> d1; //調(diào)用基礎(chǔ)模版Data<int, char> d2; //調(diào)用特化模版
}

2.3.2 偏特化

偏特化:任何針對模版參數(shù)進(jìn)一步進(jìn)行條件限制設(shè)計的特化版本。比如對于以下模板類:

template<class T1, class T2> //基礎(chǔ)模版
class Data
{
public:Data() {cout<<"Data<T1, T2>" <<endl;}
private:T1 _d1;T2 _d2;
};

偏特化有以下兩種表現(xiàn)方式:

  • 部分特化:將模板參數(shù)類表中的一部分參數(shù)特化。
// 將第二個參數(shù)特化為int
template <class T1> //部分特化模版
class Data<T1, int>
{
public:Data() {cout<<"Data<T1, int>" <<endl;}
private:T1 _d1;int _d2;
};
  • 參數(shù)限制特化:偏特化并不僅僅是指特化部分參數(shù),而是針對模板參數(shù)更進(jìn)一步的條件限制所設(shè)計出來的一個特化版本。
//兩個參數(shù)偏特化為指針類型
template <typename T1, typename T2> //限制特化模版
class Data <T1*, T2*>
{
public:Data() {cout<<"Data<T1*, T2*>" <<endl;}
private:T1 _d1;T2 _d2;
};
//兩個參數(shù)偏特化為引用類型
template <typename T1, typename T2> //限制特化模版
class Data <T1&, T2&>
{
public:Data(const T1& d1, const T2& d2): _d1(d1), _d2(d2){cout<<"Data<T1&, T2&>" <<endl;}
private:const T1 & _d1;const T2 & _d2;
};
void test2 ()
{Data<double , int> d1; // 調(diào)用特化的int版本——部分特化Data<int , double> d2; // 調(diào)用基礎(chǔ)的模板Data<int *, int*> d3; // 調(diào)用特化的指針版本——限制特化Data<int&, int&> d4(1, 2); // 調(diào)用特化的引用版本——限制特化
}

三、模版的分離編譯

3.1 什么是分離編譯

一個程序(項目)由若干個源文件共同實現(xiàn),而每個源文件單獨(dú)編譯生成目標(biāo)文件,最后將所有目標(biāo)文件鏈接起來形成單一的可執(zhí)行文件的過程稱為分離編譯模式。

3.2 模板的分離編譯

假如有以下場景,模板的聲明與定義分離開,在頭文件中進(jìn)行聲明,源文件中完成定義:

// a.h
template<class T> //聲明
T Add(const T& left, const T& right); // a.cpp
template<class T> //定義
T Add(const T& left, const T& right)
{return left + right;
}// main.cpp
#include"a.h"
int main()
{Add(1, 2); //調(diào)用Add(1.0, 2.0);return 0;
}

像這樣模版的分離編譯會發(fā)生鏈接錯誤,原因如下:
在這里插入圖片描述

錯誤原因:編譯過程中,a.cpp中定義的函數(shù)模版未能完成實例化。由于類型不明確,其代碼也就沒有編譯成指令,該函數(shù)也就沒有進(jìn)入符號表。鏈接時自然就找不到了。

3.3 解決方法

  1. 將模版的聲明和定義放到一個.hpp 或者.h文件中其實也是可以的。推薦使用這種方法。

    • 頭文件在預(yù)處理階段展開,使模版的定義和調(diào)用在同一文件下。模版的實例化能夠正常進(jìn)行,且函數(shù)的地址在編譯階段就可以確定。

    • 模版的聲明和定義在同一個文件中但可以分開來寫:簡單函數(shù)直接在類中定義,默認(rèn)內(nèi)聯(lián);復(fù)雜函數(shù)在類外定義,需要寫明類域。聲明和定義分離能使模版的結(jié)構(gòu)更清晰,代碼的可讀性更高。

注意:當(dāng)指定一個沒有經(jīng)過實例化的類模版其中的內(nèi)嵌類型(內(nèi)部類或typedef)時,需要在類型前加typename;告訴編譯器,后面這一串是類型不是靜態(tài)成員。

  1. 在模板定義的位置使用template + 類型顯式實例化。這種方法不實用,不推薦使用。

    • 每調(diào)用一種新類型的模版,就需要在源文件中(模板定義的位置)手動進(jìn)行一次顯式的實例化,不實用。

四、模版總結(jié)

【優(yōu)點(diǎn)】

  1. 模板復(fù)用了代碼,節(jié)省資源,更快的迭代開發(fā),C++的標(biāo)準(zhǔn)模板庫(STL)因此而產(chǎn)生
  2. 增強(qiáng)了代碼的靈活性

【缺陷】

  1. 模板會導(dǎo)致代碼膨脹問題,也會導(dǎo)致編譯時間變長
  2. 出現(xiàn)模板編譯錯誤時,錯誤信息非常凌亂,不易定位錯誤
http://www.risenshineclean.com/news/11569.html

相關(guān)文章:

  • wordpress退貨插件北京百度seo排名點(diǎn)擊軟件
  • dw做的網(wǎng)站怎么做后臺企業(yè)中層管理人員培訓(xùn)課程
  • 網(wǎng)站建設(shè)明薇通網(wǎng)絡(luò)天津seo建站
  • php網(wǎng)站如何編輯推廣方案的內(nèi)容有哪些
  • 云南網(wǎng)站建設(shè)專家百度搜索大全
  • 中山百度網(wǎng)站排名網(wǎng)頁百度網(wǎng)盤
  • 機(jī)械類外貿(mào)網(wǎng)站建設(shè)站長之家工具
  • 社交網(wǎng)站上的商城怎么做淘寶店鋪如何推廣
  • eclipse 網(wǎng)站開發(fā)教程臺州關(guān)鍵詞優(yōu)化平臺
  • 網(wǎng)站頁面一般以多大標(biāo)準(zhǔn)做合適百度站長收錄提交入口
  • 海宏集團(tuán)網(wǎng)站建設(shè)朋友圈網(wǎng)絡(luò)營銷
  • 中國航發(fā)網(wǎng)上商城客服電話快手seo
  • WordPress批量掃描谷歌seo代運(yùn)營
  • 重慶網(wǎng)站推百度網(wǎng)盤seo優(yōu)化
  • 小程序免費(fèi)制作網(wǎng)站2021年10月新聞?wù)?/a>
  • 風(fēng)鈴做的網(wǎng)站能否推廣seo搜索引擎優(yōu)化的內(nèi)容
  • 中山做網(wǎng)站哪個公司好如何優(yōu)化搜索引擎
  • 用vs做網(wǎng)站的登錄百度關(guān)鍵詞搜索量統(tǒng)計
  • 做網(wǎng)站的工作流程成都網(wǎng)站seo設(shè)計
  • 成都定制網(wǎng)站建設(shè)網(wǎng)站如何做seo排名
  • 網(wǎng)站技術(shù)的解決方案鄭州網(wǎng)絡(luò)營銷哪個好
  • 做京東網(wǎng)站需要哪些手續(xù)強(qiáng)強(qiáng)seo博客
  • app設(shè)計素材網(wǎng)站鄭州怎么優(yōu)化網(wǎng)站排名靠前
  • 常州網(wǎng)站制作報價php視頻轉(zhuǎn)碼
  • 做簡歷網(wǎng)站成人營銷管理培訓(xùn)班
  • 關(guān)注網(wǎng)站制作廣州各區(qū)最新動態(tài)
  • 制作釣魚網(wǎng)站移動網(wǎng)站推廣如何優(yōu)化
  • 企業(yè)做網(wǎng)頁還是網(wǎng)站網(wǎng)站優(yōu)化資源
  • cdn網(wǎng)絡(luò)對網(wǎng)站開發(fā)有影響嗎全網(wǎng)推廣代理
  • 中國建筑總公司官網(wǎng)首頁windows優(yōu)化大師怎么下載