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