内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

跟我學c++中級篇——變量模板-創(chuàng)新互聯(lián)

一、變量模板(Variable Templates)

在前面的“C++11中對模板的支持”中,對變量模板進行過基本的描述。變量模板的用處也分析的比較簡單,本篇文章專門把這個變量模板拿出來,對其進行更詳細的說明。c++14以后,c++的新的標準提供了對變量模板的支持。變量模板的作用,其實仍然是對模板編程的支持,簡化定義,增加對模板化常量的支持。其基本的語法形式如下:

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),廣德企業(yè)網(wǎng)站建設(shè),廣德品牌網(wǎng)站建設(shè),網(wǎng)站定制,廣德網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,廣德網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
template< parameter-list >variable-declaration		
variable-declaration -	a declaration of a variable. The declared variable name becomes a template name.
parameter-list -	a non-empty comma-separated list of the template parameters, each of which is either non-type parameter, a type parameter, a template parameter, or a parameter pack                         of any of those.

按上面的語法表示可以看出,變量模板的定義還是非常簡單的,它的模板參數(shù)支持非類型形參、類型形參和模板形參。

二、作用和應用

1、基礎(chǔ)使用
看一個基本的定義:

templateT Var{};//零初始化Var

模板可以有默認的模板實參,先看一下大家廣為熟悉的PI的定義:

templateconstexpr T pi = T{3.1415926535897932385};

2、對模板化常量的支持
其實就是對默認值的定義,仍然以PI為例程:

templateconstexpr T pi = T(3.1415926535897932385L); // 變量模板;需要推導T的類型

3、非類型模板參數(shù)
非類型模板參數(shù)一般是指整數(shù)類型、指針和成員指針類型以及左值引用類型、枚舉類型(c++11起);另外從c++20開始支持浮點類型和一些特定的字面類型。看下面的例子:

templatestd::arrayarr{}; // N個元素的數(shù)組,零初始化(譯注,使用initializer進行初始化)

template
constexpr decltype(N) dval = N; // dval的類型依賴于傳入的值;C++20起支持auto

4、數(shù)據(jù)成員的簡化使用
在以前的模板類成員的使用過程中,在引用類模板中的靜態(tài)成員時,還是有點復雜,看一下例子:

templateclass Min
{
public:
    static constexpr int min = 1;
};
//使用
auto min = Min::min

而如果使用變量模板對不同的情況進行特化:

//特化定義
templateint myMin = Min::min;
//使用
auto min = myMin;

另外一個就是從c++17起對類型后綴_v的簡化,在c++17以前使用某個SFINAE中的函數(shù)時,一般會有類似std::is_const::value的用法,但在之后就會見到std::is_const_v,采用就的就是變量模板定義的方式:

namespace std
{
    templateconstexpr bool is_const_v = is_const::value;
}

5、變量模板全特化和偏特化
既然是模板就會有全特化和偏特化:

//全特化
templateconstexpr std::size_t SZ = sizeof(T);
template<>constexpr std::size_t SZ= 0;

//偏特化
templateconstexpr std::size_t SZ1 = sizeof(T);
templateconstexpr std::size_t SZ1= sizeof(void*);

在c++14以前即未引入變量模板以前,參數(shù)化變量一般使用類模板的靜態(tài)數(shù)據(jù)成員或者constexpr 函數(shù)模板來返回所需要的值。而有這個變量模板后,一切都變得簡單了。

三、例程

下面看一下具體應用的例子:

//簡化的例子和非類型參數(shù)
#include#include 

templatestd::arrayarr{}; // 定義數(shù)組并初始化

template
constexpr decltype(N) dval = N;  

void TestArray()
{
    std::cout<< dval<'c'><< std::endl;  

    arr<10>[0] = 42; // 設(shè)置全局arr第1個元素的值
    for (std::size_t i = 0; i< arr<10>.size(); ++i) 
    { // 使用arr中的值
        std::cout<< arr<10>[i]<< std::endl;
    }
}
namespace  mystd {
    templateclass numeric_limits 
    {
    public:

        static constexpr bool is_signed = false;

    };
}
//可以定義:
templateconstexpr bool isSigned = mystd::numeric_limits::is_signed;
void TestSimple() 
{
    bool sig = isSigned;
    std::cout<< "mystd numeric_limits is:"<< sig<< std::endl;
}
int main()
{
    TestArray();
    TestSimple();
   
    return 0;
}

再看一個返回值的例子:

//返回值例子
templateconstexpr T PI = T(3.1415926535897932385);

templateT VAL = T(3.1415926535897932385);

templateT circular_area(T r)
{
    return PI*r*r;
}

int main()
{
    VAL= 3.1415;
    std::cout<< VAL<< std::endl;
    std::cout<< VAL<><< std::endl;
    std::cout<< PI<< std::endl;
    std::cout<< PI<< std::endl;
    std::cout<< circular_area(2.0)<< std::endl;   
    return 0;
}

對于常量和變量的表示,變量模板都可以很好實現(xiàn)。通過上面的例子可以清晰的看到其用法。習慣了C編程的同學,可能說用宏定義一個PI不更香么,這個就看你對語言理解的深度和廣度了,也考驗每個開發(fā)人員對不同的開發(fā)場景的設(shè)計應用了。
沒有最好,只有最合適。理論再好,不符合實際情況反而不妙。這個就需要每個人自己去思考。

四、總結(jié)

從上面的變量模板的使用可以看出,其實這和模板進一步編程風格的統(tǒng)一有著很大的關(guān)系。當然,在這個過程中,也將一些編程的復雜度進一步降低,特別對一些本身就是一種常量的表示進一步完善代碼風格。換句話說,在統(tǒng)一編程風格的基礎(chǔ)上,進一步簡化一些冗余的代碼表示。
總之,c++的模板編程是一個很重要的發(fā)展方向,對其不斷的進行完善和發(fā)展也符合c++發(fā)展的目標和希望。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

名稱欄目:跟我學c++中級篇——變量模板-創(chuàng)新互聯(lián)
分享地址:http://www.rwnh.cn/article22/cejpcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣軟件開發(fā)、品牌網(wǎng)站建設(shè)靜態(tài)網(wǎng)站、微信公眾號、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
安丘市| 呼图壁县| 阳西县| 舞钢市| 台南市| 石景山区| 勃利县| 荆门市| 革吉县| 平邑县| 城固县| 包头市| 墨玉县| 南乐县| 潍坊市| 深圳市| 洛阳市| 孝昌县| 商丘市| 延边| 桂东县| 五华县| 永嘉县| 秦皇岛市| 民乐县| 辽阳市| 哈巴河县| 饶河县| 桐乡市| 沁阳市| 宜城市| 三江| 搜索| 松滋市| 股票| 墨竹工卡县| 会宁县| 安新县| 库伦旗| 桦川县| 保康县|