劍指offer——面試題1:賦值運算符函數(shù)

文章大綱:
1.題目簡介
2.題目關(guān)鍵解答
3.知識總結(jié)和擴展

題目簡介


題目關(guān)鍵解答


知識總結(jié)和擴展

1.const的作用,防止變量被修改。維護變量的安全性
2.引用垄潮,防止產(chǎn)生一次拷貝副本。浪費內(nèi)存

  1. 將“引用”作為函數(shù)參數(shù)有哪些特點?
    (1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的怕磨。這時,被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實參變量或?qū)ο蟮囊粋€別名來使用寞缝,所以在被調(diào)函數(shù)中對形參變量的操作就是對其相應(yīng)的目標對象(在主調(diào)函數(shù)中)的操作癌压。
    (2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實參的副本荆陆,它是直接對實參操作滩届;而使用一般變量傳遞函數(shù)的參數(shù),當發(fā)生函數(shù)調(diào)用時被啼,需要給形參分配存儲單元帜消,形參變量是實參變量的副本;如果傳遞的是對象浓体,還將調(diào)用拷貝構(gòu)造函數(shù)泡挺。因此,當參數(shù)傳遞的數(shù)據(jù)較大時命浴,用引用比用一般變量傳遞參數(shù)的效率和所占空間都好娄猫。
    (3)使用指針作為函數(shù)的參數(shù)雖然也能達到與使用引用的效果贱除,但是,在被調(diào)函數(shù)中同樣要給形參分配存儲單元媳溺,且需要重復(fù)使用"*指針變量名"的形式進行運算月幌,這很容易產(chǎn)生錯誤且程序的閱讀性較差;另一方面悬蔽,在主調(diào)函數(shù)的調(diào)用點處扯躺,必須用變量的地址作為實參。而引用更容易使用蝎困,更清晰录语。

  2. 將“引用”作為函數(shù)返回值類型的格式、好處和需要遵守的規(guī)則?
    格式:類型標識符 &函數(shù)名(形參列表及類型說明){ //函數(shù)體 }
    好處:在內(nèi)存中不產(chǎn)生被返回值的副本禾乘;(注意:正是因為這點原因澎埠,所以返回一個局部變量的引用是不可取的。因為隨著該局部變量生存期的結(jié)束始藕,相應(yīng)的引用也會失效失暂,產(chǎn)生runtime error!
    注意事項:
    (1)不能返回局部變量的引用。這條可以參照Effective C++[1]的Item 31鳄虱。主要原因是局部變量會在函數(shù)返回后被銷毀弟塞,因此被返回的引用就成為了"無所指"的引用,程序會進入未知狀態(tài)拙已。
    (2)不能返回函數(shù)內(nèi)部new分配的內(nèi)存的引用决记。這條可以參照Effective C++[1]的Item 31游昼。雖然不存在局部變量的被動銷毀問題危纫,可對于這種情況(返回函數(shù)內(nèi)部new分配內(nèi)存的引用),又面臨其它尷尬局面纳鼎。例如建车,被函數(shù)返回的引用只是作為一個臨時變量出現(xiàn)扩借,而沒有被賦予一個實際的變量,那么這個引用所指向的空間(由new分配)就無法釋放缤至,造成memory leak潮罪。
    (3)可以返回類成員的引用,但最好是const领斥。這條原則可以參照Effective C++[1]的Item 30嫉到。主要原因是當對象的屬性是與某種業(yè)務(wù)規(guī)則(business rule)相關(guān)聯(lián)的時候,其賦值常常與某些其它屬性或者對象的狀態(tài)有關(guān)月洛,因此有必要將賦值操作封裝在一個業(yè)務(wù)規(guī)則當中何恶。如果其它對象可以獲得該屬性的非常量引用(或指針),那么對該屬性的單純賦值就會破壞業(yè)務(wù)規(guī)則的完整性嚼黔。
    (4)流操作符重載返回值申明為“引用”的作用:
    流操作符<<和>>细层,這兩個操作符常常希望被連續(xù)使用惜辑,例如:cout << "hello" << endl; 因此這兩個操作符的返回值應(yīng)該是一個仍然支持這兩個操作符的流引用∫呤辏可選的其它方案包括:返回一個流對象和返回一個流對象指針韵丑。但是對于返回一個流對象,程序必須重新(拷貝)構(gòu)造一個新的流對象虚缎,也就是說,連續(xù)的兩個<<操作符實際上是針對不同對象的钓株!這無法讓人接受实牡。對于返回一個流指針則不能連續(xù)使用<<操作符。因此轴合,返回一個流對象引用是惟一選擇创坞。這個唯一選擇很關(guān)鍵,它說明了引用的重要性以及無可替代性受葛,也許這就是C++語言中引入引用這個概念的原因吧题涨。賦值操作符=。這個操作符象流操作符一樣总滩,是可以連續(xù)使用的纲堵,例如:x = j = 10;或者(x=10)=100;賦值操作符的返回值必須是一個左值,以便可以被繼續(xù)賦值闰渔。因此引用成了這個操作符的惟一返回值選擇

再單獨說明一下注意事項的(1)和(2)

可能有人會問(1)中席函,不管是局部變量還是其他變量我都把它通過函數(shù)return給了一個實例,它就算被銷毀了還是有實例持有這個引用冈涧,怎么會沒有實例指向這個引用了茂附。

答案是:局部變量的銷毀發(fā)生在函數(shù)return之前。(這個涉及到更加底層的知識督弓,有興趣可以查閱相關(guān)資料) 所以當你return的時候营曼,你的局部變量就銷毀了。也就沒有沒有哪個實例指向這個引用愚隧。返回過去也不知道是哪個引用

(2)中如果你new了一個內(nèi)存出來蒂阱,然后去返回這個引用。那么當函數(shù)結(jié)束時狂塘,這個變量被銷毀了蒜危。但是你沒有釋放這個內(nèi)存。就會造成泄漏睹耐。再也找不到這個內(nèi)存了辐赞。

文章參考來源:
http://www.cnblogs.com/hongzg1982/articles/2145312.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市硝训,隨后出現(xiàn)的幾起案子响委,更是在濱河造成了極大的恐慌新思,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赘风,死亡現(xiàn)場離奇詭異夹囚,居然都是意外死亡,警方通過查閱死者的電腦和手機邀窃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門荸哟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞬捕,你說我怎么就攤上這事鞍历。” “怎么了肪虎?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵劣砍,是天一觀的道長。 經(jīng)常有香客問我扇救,道長刑枝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任迅腔,我火速辦了婚禮装畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沧烈。我一直安慰自己洁灵,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布掺出。 她就那樣靜靜地躺著徽千,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汤锨。 梳的紋絲不亂的頭發(fā)上双抽,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音闲礼,去河邊找鬼牍汹。 笑死,一個胖子當著我的面吹牛柬泽,可吹牛的內(nèi)容都是我干的慎菲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锨并,長吁一口氣:“原來是場噩夢啊……” “哼露该!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起第煮,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤解幼,失蹤者是張志新(化名)和其女友劉穎抑党,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撵摆,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡底靠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了特铝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暑中。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鲫剿,靈堂內(nèi)的尸體忽然破棺而出鳄逾,到底是詐尸還是另有隱情,我是刑警寧澤牵素,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站澄者,受9級特大地震影響笆呆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粱挡,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一赠幕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧询筏,春花似錦榕堰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至踱讨,卻和暖如春魏蔗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痹筛。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工莺治, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帚稠。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓谣旁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滋早。 傳聞我的和親對象是個殘疾皇子榄审,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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