默認(rèn)實參

在函數(shù)的很多次調(diào)用中它們都被賦予一個相同的值善榛,此時我們把這個反復(fù)出現(xiàn)的值稱為函數(shù)的默認(rèn)實參咕别。

調(diào)用含有默認(rèn)實參的函數(shù)時收叶,可以包含該實參掀潮,也可以省略該實參菇夸。

我們可以為一個或多個形參定義默認(rèn)值,不過需要注意的時仪吧,一旦某個形參被賦予了默認(rèn)值庄新,它后面的所有形參都必須有默認(rèn)值。

利用默認(rèn)實參定義窗口的高薯鼠、寬择诈、背景

如果想使用默認(rèn)實參,只要在調(diào)用函數(shù)的時候省略該實參就可以出皇。

調(diào)用 screen 的默認(rèn)實參

函數(shù)調(diào)用時羞芍,實參按其位置解析,默認(rèn)實參負責(zé)填補函數(shù)調(diào)用缺少的尾部實參(靠右側(cè))

當(dāng)設(shè)計含有默認(rèn)實參的函數(shù)時郊艘,其中一項任務(wù)是合理設(shè)置形參的順序荷科,讓不怎么使用默認(rèn)值的形參出現(xiàn)在前面。

對于函數(shù)的聲明纱注,通常習(xí)慣將其放在頭文件中畏浆,并且一個函數(shù)只聲明一次。但多次聲明同一個函數(shù)也是合法的狞贱。

在給定的作用域中一個形參只能被賦予一次默認(rèn)實參刻获。

函數(shù)的后續(xù)聲明只能為之前那些沒有默認(rèn)值的形參添加默認(rèn)實參,而且該形參右側(cè)的所有形參必須都有默認(rèn)值瞎嬉。

通常應(yīng)該在函數(shù)聲明中指定默認(rèn)實參蝎毡,并將該聲明放在合適的頭文件中。

局部變量不能作為默認(rèn)實參佑颇。此外只要表達式的類型能轉(zhuǎn)換成形參所需的類型顶掉,該表達式就能作為默認(rèn)實參。

string window = screen()? // 調(diào)用 screen (ht(),80,' ')?

用作默認(rèn)實參的名字在函數(shù)聲明所在的作用域內(nèi)解析挑胸,而這些名字的求值過程發(fā)生在函數(shù)調(diào)用時:


將規(guī)模較小的操作定義成函數(shù)的好處

但調(diào)用函數(shù)一般比求等價表達式的值要慢一些痒筒。

將函數(shù)指定為內(nèi)聯(lián)函數(shù),通常就是將它在每個調(diào)用點上“內(nèi)聯(lián)地”展開茬贵。假設(shè)我們把 shorterString 函數(shù)定義成內(nèi)聯(lián)函數(shù):

cout << shorterString(s1,s2) << endl;

// 將在編譯過程中展開成類似于下面的形式?

cout << (s1.size() < s2.size() ? s1: s2 ) << endl;

從而消除了?shorterString 函數(shù)的運行時開鎖

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

聲明內(nèi)聯(lián)函數(shù)

constexpr 函數(shù)是指能用于常量表達式的函數(shù)解藻。

定義?constexpr 函數(shù)的方法與其它函數(shù)類似老充,不過要遵循幾條約定:函數(shù)的返回類型及所有形參的類型都得是字面值類型,而且函數(shù)體中必須有且只有一條 return 語句螟左。

constexpr 函數(shù)

constexpr 函數(shù)中可以有空語句啡浊、類型別名觅够、using聲明等。

內(nèi)聯(lián)函數(shù)和 constexpr函數(shù)通常定義在頭文件中巷嚣。

C++中有時會用到一種類似頭文件保護的技術(shù)喘先,以便有選擇地執(zhí)行調(diào)試代碼。

程序可以包含一些用于調(diào)試的代碼廷粒,但這些代碼只在開發(fā)程序時使用窘拯。當(dāng)應(yīng)用程序編寫完成準(zhǔn)備發(fā)布時會屏蔽掉調(diào)試代碼。

用到的兩項處理功能 assert 坝茎、NDEBUG?

assert 是一種預(yù)處理宏涤姊,也就是一個預(yù)處理變量,它的行為有點類似于內(nèi)聯(lián)函數(shù)嗤放。assert宏 使用一個表達式作為它的條件思喊。

assert宏

首先對 expr 求值,如果表達式為假斤吐,assert 輸出信息并終止程序的執(zhí)行搔涝。如果表達式為真厨喂,assert 什么也不做和措。

assert宏定在 cassert 頭文件中。其常用于檢查“不能發(fā)生”的條件蜕煌。

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

可以使用一個 #define 語句定義?NDEBUG?贫母,從而關(guān)閉調(diào)試狀態(tài)。

編譯器提供的命令行選項

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

使用NDEBUG 編寫條件調(diào)試代碼

變量_ _func_ _用于輸出當(dāng)前調(diào)試的函數(shù)的名字,是一個 const char 的一個靜態(tài)數(shù)組涡上,用于存放函數(shù)的名字趾断。

預(yù)處理器定義的名字

可以使用這些常量在錯誤消息中提供更多信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吩愧,一起剝皮案震驚了整個濱河市芋酌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雁佳,老刑警劉巖脐帝,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件同云,死亡現(xiàn)場離奇詭異,居然都是意外死亡堵腹,警方通過查閱死者的電腦和手機梢杭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秸滴,“玉大人武契,你說我怎么就攤上這事〉春” “怎么了咒唆?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長释液。 經(jīng)常有香客問我全释,道長,這世上最難降的妖魔是什么误债? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任浸船,我火速辦了婚禮,結(jié)果婚禮上寝蹈,老公的妹妹穿的比我還像新娘李命。我一直安慰自己,他們只是感情好箫老,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布封字。 她就那樣靜靜地躺著,像睡著了一般耍鬓。 火紅的嫁衣襯著肌膚如雪阔籽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天牲蜀,我揣著相機與錄音笆制,去河邊找鬼。 笑死涣达,一個胖子當(dāng)著我的面吹牛在辆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峭判,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼开缎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了林螃?” 一聲冷哼從身側(cè)響起奕删,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疗认,沒想到半個月后完残,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伏钠,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年谨设,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扎拣。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡赴肚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出二蓝,到底是詐尸還是另有隱情誉券,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布刊愚,位于F島的核電站踊跟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸥诽。R本人自食惡果不足惜商玫,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牡借。 院中可真熱鬧拳昌,春花似錦、人聲如沸蓖捶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俊鱼。三九已至,卻和暖如春畅买,著一層夾襖步出監(jiān)牢的瞬間并闲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工谷羞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帝火,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓湃缎,卻偏偏與公主長得像犀填,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嗓违,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 函數(shù)是一個命了名的代碼塊九巡,我們通過調(diào)用函數(shù)執(zhí)行相應(yīng)的代碼。函數(shù)可以有零個或者多個參數(shù)蹂季,而且(通常)會產(chǎn)生一個結(jié)果冕广。...
    丶不霽何虹閱讀 1,154評論 0 1
  • 1疏日、函數(shù)基礎(chǔ) 典型的函數(shù)定義包括:返回類型、函數(shù)名撒汉、由0個或多個形參組成的列表以及函數(shù)體沟优。 2、參數(shù)傳遞 形參初始...
    久伴必知情深閱讀 491評論 0 0
  • 0.一些有用的概念 <0>: 自動對象:對于普通局部變量對應(yīng)的對象而言睬辐,當(dāng)函數(shù)的控制路徑經(jīng)過該變量定義語句時創(chuàng)建該...
    BrightHewei閱讀 249評論 0 1
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,523評論 1 51
  • c++函數(shù)默認(rèn)實參和python類似挠阁。差別如下 c++默認(rèn)實參在函數(shù)聲明中在指定,并將該聲明放在合適的頭文件中溯饵。并...
    m_walle閱讀 183評論 0 0