return語句

每個(gè)程序員對(duì)return語句并不陌生骨望,初學(xué)者很少會(huì)顧及返回值,甚至于不知道return語句有啥作用。但是如果有點(diǎn)工作經(jīng)驗(yàn)的人應(yīng)該會(huì)重視并利用這個(gè)返回值來定位處理問題雾鬼,或者說留下特征值作為判斷依據(jù)。

如果面試題目問你return語句的作用宴树,那么我建議你可以簡(jiǎn)答為:

1.返回一個(gè)值策菜,這個(gè)值可以是任意類型,也包括void酒贬;

2.使程序返回到操作系統(tǒng)(即終止程序)

幾乎所有的語言里都會(huì)有return語句又憨,沒有return語句,那么你這段代碼可能有千百萬行锭吨,正如下坡過程中沒有剎車一般蠢莺,直接梭到完。很明顯零如,這樣的程序像一大坨XX躏将,可讀性不好,令人難以接受考蕾。這里不接受用goto祸憋,或者匯編語言里的jump語句來跳出這種解釋。如果你有些時(shí)間辕翰,那么我會(huì)建議你讀完后面的內(nèi)容夺衍。

當(dāng)然特別的是,有些語言允許你return多個(gè)值喜命,比如Python沟沙,當(dāng)然這個(gè)返回多個(gè)值本質(zhì)上也是返回一個(gè)值,是以元組的方式返回壁榕。

return語句用于結(jié)束當(dāng)前正在執(zhí)行的函數(shù)矛紫,并將控制權(quán)返回給調(diào)用此函數(shù)的函數(shù)。主要有兩種形式:

沒有返回值牌里,直接return颊咬;

有返回值,return expression牡辽;

不帶返回值的函數(shù)

不帶返回值的return語句喳篇,也就是返回類型是void。在返回類型為void的函數(shù)中态辛,return返回語句不是必需的麸澜,隱式的return發(fā)生在函數(shù)的最后一個(gè)語句完成時(shí)。如果一個(gè)程序返回為void奏黑,也就意味著你可以不用寫return語句炊邦,不寫他會(huì)自動(dòng)調(diào)用编矾。

具有返回值的函數(shù)

任何返回類型不是void的函數(shù)都必須返回一個(gè)值,而且這個(gè)返回值的類型必須和函數(shù)的返回類型相同馁害,或者能隱式轉(zhuǎn)化為函數(shù)的返回類型窄俏。

盡管C++不能確保結(jié)果的正確性,但能保證函數(shù)每一次return都返回適當(dāng)類型的結(jié)果碘菜。每一次判斷返回的return當(dāng)中凹蜈,必須要有返回值。

但也有編譯器不能檢測(cè)出的漏洞炉媒,比如在含有return語句的循環(huán)后沒有提供return語句是很危險(xiǎn)的踪区,這個(gè)時(shí)候運(yùn)行時(shí)會(huì)出現(xiàn)什么問題是不確定的。返回值有以下幾種情況:

1.主函數(shù)main的返回值

返回類型不是void的函數(shù)必須返回一個(gè)值吊骤,但此規(guī)則有一個(gè)例外的情況:允許主函數(shù)main沒有返回值就可結(jié)束缎岗。如果程序控制執(zhí)行到主函數(shù)main的最后一個(gè)語句都還沒有返回,那么編譯器會(huì)隱式地插入返回0 的語句白粉。

2.返回非引用類型

當(dāng)函數(shù)返回非引用類型時(shí)传泊,其返回值既可以是局部對(duì)象,也可以是求解表達(dá)式的結(jié)果鸭巴。

3.返回引用

當(dāng)函數(shù)返回引用類型時(shí)眷细,沒有復(fù)制返回值。相反鹃祖,返回的是對(duì)象本身溪椎。

4.千萬不要返回局部對(duì)象的引用

當(dāng)函數(shù)執(zhí)行完畢時(shí),將釋放分配給局部對(duì)象的存儲(chǔ)空間恬口,此時(shí)局部對(duì)象的引用就會(huì)指向不確定的內(nèi)存校读。這個(gè)地方是很多新手都會(huì)換的錯(cuò)誤。然后出現(xiàn)問題了祖能,debug半天也沒發(fā)現(xiàn)問題歉秫。

5.引用返回左值

這個(gè)是常用的地方,如果你不希望引用返回值被修改养铸,返回值可以聲明為const

6.千萬不要返回指向局部對(duì)象的指針

當(dāng)函數(shù)的返回指針類型和局部對(duì)象的引用一樣雁芙,返回指向局部對(duì)象的指針也是錯(cuò)誤的。一旦函數(shù)結(jié)束钞螟,局部對(duì)象被釋放兔甘,返回的指針就變成了指向不存在的對(duì)象的懸垂指針。

很多時(shí)候鳞滨,我們debug問題基本就是根據(jù)返回值來定位的裂明,給出的返回值能夠追溯問題的本源,重視r(shí)eturn語句,用好他闽晦,你可以百萬軍中取上將首級(jí)。不是所有的編譯器都可以檢測(cè)出你return語句的問題提岔,有些不嚴(yán)謹(jǐn)?shù)木幾g器不會(huì)去判斷你給的return值是不是跟返回類型一樣仙蛉,甚至有些需要返回值而你沒return值也讓你通過,這樣是很可怕的碱蒙,這個(gè)返回值可能就是定時(shí)的炸彈荠瘪。

當(dāng)然,return語句還在許多組合中赛惩,比如在try catch return拋出異常哀墓,在if else中的作用,用好他喷兼,能讓你的代碼更簡(jiǎn)練篮绰,讓你的代碼更優(yōu)雅。

兔云程序

致力于推廣編程教程季惯,服務(wù)程序員

22篇原創(chuàng)內(nèi)容

公眾號(hào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吠各,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子勉抓,更是在濱河造成了極大的恐慌贾漏,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藕筋,死亡現(xiàn)場(chǎng)離奇詭異纵散,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)隐圾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伍掀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翎承,你說我怎么就攤上這事硕盹。” “怎么了叨咖?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瘩例,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我甸各,道長(zhǎng),這世上最難降的妖魔是什么趣倾? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任聘惦,我火速辦了婚禮,結(jié)果婚禮上儒恋,老公的妹妹穿的比我還像新娘善绎。我一直安慰自己黔漂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布禀酱。 她就那樣靜靜地躺著炬守,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剂跟。 梳的紋絲不亂的頭發(fā)上减途,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音曹洽,去河邊找鬼鳍置。 笑死,一個(gè)胖子當(dāng)著我的面吹牛送淆,可吹牛的內(nèi)容都是我干的税产。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坊夫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼砖第!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起环凿,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤梧兼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后智听,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羽杰,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年到推,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考赛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莉测,死狀恐怖颜骤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捣卤,我是刑警寧澤忍抽,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站董朝,受9級(jí)特大地震影響鸠项,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜子姜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一祟绊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦牧抽、人聲如沸嘉熊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽记舆。三九已至,卻和暖如春呼巴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背御蒲。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工衣赶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厚满。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓府瞄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親碘箍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遵馆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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