亚洲线精品久久一区二区三区,成人看片在线观看,草草视频手机在线观看视频,亚洲六月丁香色婷婷综合久久

首頁 > 生活 >

天天速訊:C++ 特殊用途語言特性

默認(rèn)實(shí)參

某些函數(shù)包含一些實(shí)參,在函數(shù)的很多次調(diào)用中他們都被賦予相同的一個(gè)值,此時(shí)我們把這個(gè)反復(fù)出現(xiàn)的值稱為函數(shù)的默認(rèn)實(shí)參。調(diào)用含有默認(rèn)實(shí)參的函數(shù)時(shí),我們可以包含該實(shí)參,也可以省略該實(shí)參。


(資料圖片僅供參考)

例如我們用string對象表示窗口內(nèi)容,一般我們希望該窗口的高、寬和背景字符都是用默認(rèn)值,但是同時(shí)我們也允許用戶為這幾個(gè)參數(shù)自由指定與默認(rèn)值不同的數(shù)值。我們把他定義成以下形式:

我們?yōu)槊恳粋€(gè)參數(shù)都提供了默認(rèn)實(shí)參,默認(rèn)實(shí)參作為形參的初始值出現(xiàn)在形參列表中,我們可以為一個(gè)或多個(gè)形參定義默認(rèn)值,一旦某個(gè)形參被賦予了默認(rèn)值,他后面的所有形參都必須有默認(rèn)值。

使用默認(rèn)實(shí)參調(diào)用函數(shù)

如果我們想使用默認(rèn)實(shí)參,只要在調(diào)用函數(shù)的時(shí)候省略該實(shí)參就行了。

函數(shù)調(diào)用時(shí)實(shí)參按其位置解析,默認(rèn)實(shí)參負(fù)責(zé)填補(bǔ)函數(shù)調(diào)用缺少的尾部實(shí)參

第二種傳遞的雖然是個(gè)?字符,但是會自動轉(zhuǎn)換為sz的無符號整數(shù),也就是ascii碼的值。

當(dāng)設(shè)計(jì)含有默認(rèn)實(shí)參的函數(shù)時(shí),一般將不常用的形參寫在前面,而將常用的寫在后面。

默認(rèn)實(shí)參聲明

在給定作用域中一個(gè)形參只能被賦予一次默認(rèn)形參,也就是函數(shù)后續(xù)的聲明只能為之前那些沒有默認(rèn)值的形參添加默認(rèn)實(shí)參,而且該形參右側(cè)的所有形參都必須又默認(rèn)值。

內(nèi)聯(lián)函數(shù)和constexpr函數(shù)

調(diào)用函數(shù)一般比求等價(jià)表達(dá)式的值要慢一些。在大多數(shù)機(jī)器上,一次函數(shù)調(diào)用其實(shí)包含這一系列工作,調(diào)用前要先保存寄存器,并在返回時(shí)恢復(fù);可能需要拷貝實(shí)參,程序轉(zhuǎn)向一個(gè)新的位置繼續(xù)執(zhí)行。

內(nèi)聯(lián)函數(shù)可避免函數(shù)調(diào)用的開銷

將函數(shù)指定為內(nèi)聯(lián)函數(shù),通常是將他在每個(gè)調(diào)用點(diǎn)上“內(nèi)聯(lián)的”展開。如果我們把之前的shorterString函數(shù)定義成內(nèi)聯(lián)函數(shù)

將在編譯過程中展開成類似

的形式,這樣就消除了shorterString函數(shù)運(yùn)行時(shí)的開銷。

在shorterString函數(shù)的返回類型前加上關(guān)鍵字inline,這樣就可以將它聲明為內(nèi)聯(lián)函數(shù)了。

一般來說,內(nèi)聯(lián)機(jī)制用于優(yōu)化規(guī)模小、流程直接、頻繁調(diào)用的函數(shù)。很多編譯器都不支持內(nèi)聯(lián)遞歸函數(shù),而且一個(gè)75行的函數(shù)也不太可能在調(diào)用點(diǎn)內(nèi)斂地展開。

constexpr函數(shù)

constexpr函數(shù)是指能用于常量表達(dá)式的函數(shù)。定義constexpr函數(shù)的方法和其他函數(shù)類似,不過需要注意,函數(shù)的返回類型及所有形參的類型都得是字面值類型,而且函數(shù)中必須有且只有一條return語句。

執(zhí)行該初始化任務(wù)時(shí),編譯器把對constexpr函數(shù)的調(diào)用替換成其結(jié)果值,為了能在編譯過程中隨時(shí)展開,constexpr函數(shù)被隱式的指定為內(nèi)聯(lián)函數(shù)。

constexpr函數(shù)體內(nèi)也可以包含其他語句,只要這些語句在運(yùn)行時(shí)不執(zhí)行任何操作就行,

如果我們用一個(gè)非常量表達(dá)式調(diào)用scale函數(shù),則返回值是一個(gè)非常量表達(dá)式。

constexpr函數(shù)不一定返回常量表達(dá)式。

由于內(nèi)聯(lián)函數(shù)和constexpr函數(shù)可以在程序中多次定義,編譯器要想展開函數(shù)僅有函數(shù)聲明是不夠的,還要函數(shù)的定義。不過對于某個(gè)給定的內(nèi)聯(lián)函數(shù)或者constexpr函數(shù)來說,他的多個(gè)定義必須完全一致,所以一般將內(nèi)聯(lián)函數(shù)和constexpr函數(shù)定義在頭文件中。

調(diào)試幫助

有時(shí)我們會用到一種類似于頭文件保護(hù)的技術(shù),以便有選擇地執(zhí)行調(diào)試代碼?;舅枷胧牵绦蚩梢园恍┯糜谡{(diào)試的代碼,但是這些代碼只在開發(fā)程序時(shí)使用,當(dāng)應(yīng)用程序編寫完成時(shí),要先屏蔽調(diào)試代碼,這種方法用到兩項(xiàng)預(yù)處理功能,assert和NDEBUG。

assert預(yù)處理宏

assert是一種預(yù)處理宏,所謂預(yù)處理宏其實(shí)是一個(gè)預(yù)處理變量,他的行為有點(diǎn)類似于內(nèi)聯(lián)函數(shù),assert宏使用一個(gè)表達(dá)式作為他的條件,

首先對expr求值,如果表達(dá)式為假,assert輸出信息并終止程序的執(zhí)行,如果表達(dá)式為真,assert什么也不做。

assert宏定義在cassert頭文件中。

預(yù)處理名字由預(yù)處理器而不是編譯器管理,因此我們可以直接使用預(yù)處理名字而無需提供using聲明。我們應(yīng)該直接使用assert而不是std::assert,也不需要using。

和預(yù)處理變量一樣,宏名字在程序內(nèi)必須唯一,含有assert頭文件的程序不能再定義名為assert的變量、函數(shù)或者其他實(shí)體。所以無論如何我們應(yīng)該避免使用assert作為名字。

assert宏常用于檢查“不能發(fā)生的條件”。例如,一個(gè)對輸入文本進(jìn)行操作的程序可能要求所有給定單詞的長度都大于某個(gè)閾值,此時(shí)我們可以使用

NDEBUG預(yù)處理變量

assert的行為依賴于一個(gè)名為NDEBUG的預(yù)處理變量的狀態(tài),如果定義了NDEBUG則assert什么也不做,默認(rèn)狀態(tài)下沒有定義NDEBUG,此時(shí)assert將執(zhí)行運(yùn)行時(shí)檢查。

我們可以使用#define語句定義NDEBUG,從而關(guān)閉調(diào)試狀態(tài)。所以,assert應(yīng)該僅用于驗(yàn)證那些確實(shí)不可能發(fā)生的事情,我們可以把a(bǔ)ssert當(dāng)成調(diào)試程序的一種輔助手段,但是不能用它替代真正的運(yùn)行時(shí)邏輯狀態(tài),也不能替代程序本身應(yīng)該包含的錯(cuò)誤檢查。

除了用于assert外,NDEBUG也可以編寫自己的條件調(diào)試代碼。如果NDEBUG未定義,將執(zhí)行#ifndef和#endif之間的代碼,如果定義了NDEBUG,這些代碼被忽略

我們使用變量__func__輸出當(dāng)前調(diào)試的函數(shù)的名字,編譯器為每個(gè)函數(shù)都定義了__func__,他是const char的一個(gè)靜態(tài)數(shù)組,用于存放函數(shù)的名字。

還有四個(gè)對于程序調(diào)試很有用的名字

如果我們給程序提供了一個(gè)長度小于threshold的string對象,將得到下面的錯(cuò)誤消息。

關(guān)鍵詞:

責(zé)任編輯:Rex_05

推薦閱讀

打官司越來越簡單

· 2023-04-05 11:06:11

天天資訊:雨潤春色

· 2023-04-05 10:38:53

關(guān)于我們 聯(lián)系我們 商務(wù)合作 誠聘英才 網(wǎng)站地圖

Copyright @ 2008-2020 www.wnchengjie.com Corporation,All Rights Reserved

熱訊新聞網(wǎng) 版權(quán)所有 備案號:豫ICP備20005723號-6
文章投訴郵箱:2 9 5 9 1 1 5 7 8@qq.com 違法信息舉報(bào)郵箱:jubao@123777.net.cn

營業(yè)執(zhí)照公示信息

亚洲线精品久久一区二区三区,成人看片在线观看,草草视频手机在线观看视频,亚洲六月丁香色婷婷综合久久
  • <acronym id="qmqcg"><cite id="qmqcg"></cite></acronym>
    <td id="qmqcg"><em id="qmqcg"></em></td>
    • 主站蜘蛛池模板: 97婷婷涩涩精品一区| 在线观看欧美成人| 国产精品精品一区二区三区午夜版 | 国产精品自产拍在线观看中文| 国产91在线播放精品91| 国产高清在线不卡| 欧美精品一二区| 日韩国产欧美区| 国产成人高清激情视频在线观看| 97成人精品区在线播放| 国产精品偷伦视频免费观看国产| 成人国内精品久久久久一区| 久久久视频免费观看| 91精品国产乱码久久久久久蜜臀 | 日韩激情在线视频| 亚洲毛片在线免费观看| 亚洲午夜未满十八勿入免费观看全集| 亚洲人午夜精品免费| 成人在线播放av| 亚洲裸体xxxx| 蜜臀久久99精品久久久久久宅男| 狠狠干狠狠久久| 国产精品日韩一区| 国产91精品久| 成人激情视频小说免费下载| 亚洲性69xxxbbb| 欧美激情第6页| 国产主播精品在线| 中文一区二区视频| 国模精品视频一区二区| 91久久精品美女| 久久久电影免费观看完整版| 欧美亚洲激情视频| 亚洲自拍偷拍第一页| 精品国产一区二区三区久久久狼| 久久久这里只有精品视频| 国产精品欧美激情| 久久九九热免费视频| 国产精品久久久久久久9999 | 成人国内精品久久久久一区| 久久九九国产精品怡红院 |