[進(jìn)階]C++:函數(shù)

函數(shù)基礎(chǔ)

  • 函數(shù)包括:返回類型市殷、函數(shù)名字、0個(gè)或多個(gè)形參組成的列表

形參和實(shí)參

  • 實(shí)參是形參的初始值

局部靜態(tài)對(duì)象

在程序的執(zhí)行路徑的第一經(jīng)過對(duì)象的語(yǔ)句時(shí)初始化刹衫,并且直到程序終止才被取消醋寝。在此期間即使對(duì)象所在的函數(shù)結(jié)束執(zhí)行也不會(huì)對(duì)它有影響。

#include <iostream>
size_t count_calls()
{
    static size_t ctr = 0;//調(diào)用結(jié)束后這個(gè)值仍有效带迟,只初始化一次
    return ctr++;
}
int main()
{
    std::cout << "Hello World!\n";
    for (size_t i = 0; i != 10; i++)
    {
        std::cout << count_calls() << std::endl;
    }
}

參數(shù)傳遞

  • 引用傳遞:形參綁定到對(duì)應(yīng)的實(shí)參上
  • 值傳遞:實(shí)參的值拷貝到形參上音羞,兩者相互獨(dú)立
    最好用引用傳遞,值傳遞往往低效仓犬。如果無(wú)需修改形參的值嗅绰,最好用const引用

引用形參返回額外的信息

一直以來我都是用自定義數(shù)據(jù)類型來返回的。。窘面。翠语。。民镜。(愚蠢)

  • 有一種非常簡(jiǎn)單的方法啡专,多給函數(shù)傳入一個(gè)額外的實(shí)參引用!制圈!

#include <iostream>
bool count_calls(const int & a, int& b)
{
    if (a % 2 == 0)
    {
        b = 1;
        return 1;
    }   
    else
    {
        b = 0;
        return 0;
    }
        
}
int main()
{
    int b = 0;
    int a = 0;
    if (count_calls(a, b))
    {
        std::cout << b;
    
    }
    
}

const 形參和實(shí)參

  • 當(dāng)實(shí)參初始化形參時(shí)會(huì)忽略掉頂層const,當(dāng)形參有const時(shí)畔况,傳給它常量或者非常量都是可以的
const int ci=42;//不能改變Ci,const是頂層的
int i=ci;//正確:當(dāng)拷貝ci時(shí)鲸鹦,忽略了它的頂層const
int *const p=&i;//const是頂層的,不能給p賦值
*p=0;//正確:通過p改變對(duì)象的內(nèi)容是允許的跷跪,現(xiàn)在i變成了0

void fcn(const int i)
{
  '''
  fcn能讀取i馋嗜,但是不能向i寫值
  '''
}

指針或引用形參與const

直接上例程

int i=42;
const int *cp = &i;//正確:但是cp不能改變i
const int  &r=i;//正確:但是r不能改變i
const int &r2=42;//正確
int *p=cp;//錯(cuò)誤:p的類型和cp的類型不匹配
int &r3=r;//錯(cuò)誤:r3的類型和r的類型不匹配
int &r4=42;//錯(cuò)誤:不能用字面值初始化一個(gè)非常量引用

應(yīng)用到參數(shù)傳遞上如下

int i=0;
const int ci=i;
string::size_type ctr=0;
reset(&i);//調(diào)用形參類型是int*的reset函數(shù)
reset(&ci);//錯(cuò)誤:不能用指向const int 對(duì)象的指針初始化int*
reset(i);//調(diào)用形參類型是int&的reset函數(shù)
reset(ci);//錯(cuò)誤:不能把普通引用綁定到const對(duì)象ci上
reset(42);//錯(cuò)誤:不能把普通應(yīng)用綁定到字面值上
reset(ctr);//錯(cuò)誤:類型不匹配,ctr是無(wú)符號(hào)類型
find_char("Hello World!",'o',ctr);//正確:find_char的第一形參是對(duì)常量的引用

盡量用常量引用

舉個(gè)栗子~~~

string::size_type find_char(string &s,char c,string::size_type &occurs);
find_char ("hello World",'o',ctr);//錯(cuò)誤吵瞻,string &s 無(wú)法引用字面初始值

參考:C++primer 第五版

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葛菇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子橡羞,更是在濱河造成了極大的恐慌眯停,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卿泽,死亡現(xiàn)場(chǎng)離奇詭異莺债,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)签夭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門齐邦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人第租,你說我怎么就攤上這事措拇。” “怎么了慎宾?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵丐吓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我璧诵,道長(zhǎng)汰蜘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任之宿,我火速辦了婚禮族操,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己色难,他們只是感情好泼舱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枷莉,像睡著了一般娇昙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笤妙,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天冒掌,我揣著相機(jī)與錄音,去河邊找鬼蹲盘。 笑死股毫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的召衔。 我是一名探鬼主播铃诬,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼苍凛!你這毒婦竟也來了趣席?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤醇蝴,失蹤者是張志新(化名)和其女友劉穎宣肚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哑蔫,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钉寝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闸迷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嵌纲。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腥沽,靈堂內(nèi)的尸體忽然破棺而出逮走,到底是詐尸還是另有隱情,我是刑警寧澤今阳,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布师溅,位于F島的核電站,受9級(jí)特大地震影響盾舌,放射性物質(zhì)發(fā)生泄漏墓臭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一妖谴、第九天 我趴在偏房一處隱蔽的房頂上張望窿锉。 院中可真熱鬧酌摇,春花似錦、人聲如沸嗡载。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洼滚。三九已至埂息,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遥巴,已是汗流浹背千康。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挪哄,地道東北人吧秕。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像迹炼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颠毙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,519評(píng)論 1 51
  • #1.函數(shù)基礎(chǔ)1.1 局部對(duì)象1.2 函數(shù)聲明1.3 分離式編譯 #2.參數(shù)傳遞2.1 傳值參數(shù)2.2 傳引用參數(shù)...
    MrDecoder閱讀 600評(píng)論 0 1
  • 3. 類設(shè)計(jì)者工具 3.1 拷貝控制 五種函數(shù)拷貝構(gòu)造函數(shù)拷貝賦值運(yùn)算符移動(dòng)構(gòu)造函數(shù)移動(dòng)賦值運(yùn)算符析構(gòu)函數(shù)拷貝和移...
    王偵閱讀 1,810評(píng)論 0 1
  • 1. C++基礎(chǔ) 大多數(shù)編程語(yǔ)言通過兩種方式來進(jìn)一步補(bǔ)充其基本特征1)賦予程序員自定義數(shù)據(jù)類型的權(quán)利斯入,從而實(shí)現(xiàn)對(duì)語(yǔ)...
    王偵閱讀 757評(píng)論 0 3
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,819評(píng)論 0 38