在某些情況下,編譯器需要建立臨時物件。 可能會出於下列原因建立這些臨時物件:
• 使用乙個不同於所初始化的引用的基礎型別的型別的初始值設定項初始化 const 引用。
• 儲存返回使用者定義型別的函式的返回值。 僅當您的程式未將返回值複製到物件時,才會建立這些臨時記憶體。 例如:
複製udt func1(); // declare a function that returns a user-defined
// type.
func1(); // call func1, but discard return value.
// a temporary object is created to store the return
// value.
由於未將返回值複製到另乙個物件,因此建立了臨時物件。 建立臨時記憶體更常見的情況是在計算必須呼叫過載運算子函式的表示式時。 這些過載運算子函式將返回一般不會複製到其他物件的使用者定義的型別。
請考慮表示式 complexresult = complex1 + complex2 + complex3。 將計算表示式 complex1 + complex2,並且結果將儲存在臨時物件中。 接下來,將計算表示式 temporary + complex3,並將結果複製到 complexresult(假設未過載賦值運算子)。
• 儲存強制轉換為使用者定義的型別的結果。 在給定型別的物件顯式轉換為使用者定義的型別時,將構造乙個新物件作為臨時物件。
臨時物件具有根據其建立點和銷毀點定義的生存期。 建立多個臨時物件的表示式最終會按與這些物件的建立順序相反的順序來銷毀它們。 下表中顯示了析構發生的時點。
臨時物件的析構點
建立臨時項的原因
析構點
表示式計算的結果
將在表示式語句末尾(即,分號處)或 for、if、while、do 和 switch 語句的控制表示式的末尾銷毀作為表示式計算結果建立的所有臨時項。
初始化 const 引用
如果初始值設定項不是與所初始化引用相同型別的左值,則將用初始化表示式建立和初始化基礎物件型別的臨時項。 此臨時物件將在其繫結到的引用物件銷毀後立即銷毀。
C 中的臨時物件
我們知道在c 的建立物件是乙個費時,費空間的乙個操作。有些固然是必不可少,但還有一些物件卻在我們不知道的情況下被建立了。通常以下三種情況會產生臨時物件 1,以值的方式給函式傳參 2,型別轉換 3,函式需要返回乙個物件時 現在我們依次看這三種情況 一,以值的方式給函式傳參。我們知道給函式傳參有兩種方式...
C 中的臨時物件
1,臨時物件神秘在於不知不覺就請入程式當中,並且給程式帶來了一定的問題 2,下面的程式輸出什麼?為什麼?1 include 2 3class test411 12 test 這裡程式作者想要 復用,直接呼叫已經構造好的函式來完成沒有引數的建構函式的函式體 1316 17void print 1821...
建立物件的過程(臨時物件)
class cgoods cgoods cgoods float price cgoods const cgoods rhs const 1.防止實參被修改 2.接收隱式生成的臨時量 下面對執行結果分析 cgoods good1 good1 1,1.1 呼叫帶三個引數的建構函式 堆區 cgoods ...