郝亞洲 李文敏
在學(xué)習(xí)計(jì)算機(jī)語(yǔ)言諸如C++之類(lèi)的時(shí)候,經(jīng)常會(huì)遇到一個(gè)詞匯—“臨時(shí)對(duì)象”,這個(gè)概念很多初學(xué)者在學(xué)習(xí)了很長(zhǎng)時(shí)間計(jì)算機(jī)語(yǔ)言之后還是不能很好的理解它的含義和它背后隱藏的真實(shí)實(shí)現(xiàn)是什么,該文通過(guò)實(shí)例探討了臨時(shí)對(duì)象的特點(diǎn)和特性,對(duì)理解計(jì)算機(jī)語(yǔ)言中這一較難的概念有很大的幫助和啟發(fā)。
C++;臨時(shí)變量;臨時(shí)對(duì)象
當(dāng)程序員之間進(jìn)行交談時(shí),他們經(jīng)常把僅僅需要一小段時(shí)間的變量稱(chēng)為臨時(shí)變量。例如在下面這段swap(交換)例程里:
在C++中真正的臨時(shí)對(duì)象是看不見(jiàn)的,它們不出現(xiàn)在你的源代碼中。建立一個(gè)沒(méi)有命名的非堆(non-heap)對(duì)象會(huì)產(chǎn)生臨時(shí)對(duì)象。這種未命名的對(duì)象通常在兩種條件下產(chǎn)生:為了使函數(shù)成功調(diào)用而進(jìn)行隱式類(lèi)型轉(zhuǎn)換和函數(shù)返回對(duì)象時(shí)。理解如何和為什么建立這些臨時(shí)對(duì)象是很重要的,因?yàn)闃?gòu)造和釋放它們的開(kāi)銷(xiāo)對(duì)于程序的性能來(lái)說(shuō)有著不可忽視的影響。
首先考慮為使函數(shù)成功調(diào)用而建立臨時(shí)對(duì)象這種情況。當(dāng)傳送給函數(shù)的對(duì)象類(lèi)型與參數(shù)類(lèi)型不匹配時(shí)會(huì)產(chǎn)生這種情況。例如一個(gè)函數(shù),它用來(lái)計(jì)算一個(gè)字符在字符串中出現(xiàn)的次數(shù):
//返回ch在str中出現(xiàn)的次數(shù)
看一下count Char的調(diào)用。第一個(gè)被傳送的參數(shù)是字符數(shù)組,但是對(duì)應(yīng)函數(shù)的正被綁定的參數(shù)的類(lèi)型是const string&。僅當(dāng)消除類(lèi)型不匹配后,才能成功進(jìn)行這個(gè)調(diào)用,你的編譯器很樂(lè)意替你消除它,方法是建立一個(gè)string類(lèi)型的臨時(shí)對(duì)象。通過(guò)以buffer做為參數(shù)調(diào)用string的構(gòu)造函數(shù)來(lái)初始化這個(gè)臨時(shí)對(duì)象。……