C 臨時變數的生命週期

2021-07-11 03:47:20 字數 1130 閱讀 6305

**:

c++ 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類:

string proc() 

int main()

其中第 6 行會產生乙個臨時變數。但並不是所有返回值都會建立臨時變數,只有當沒有將返回值賦值給其它變數時,臨時變數才會建立。這種臨時變數的生命週期很短,當表示式完成後,它就會被銷毀了。例如上面的**,第 6 行產生的臨時變數,到第 7 行的時候就已經銷毀了。

int a = 3;

float k = 2.0;

float f = k + a;

第4行,k+a 由於是 float + int , int 會被轉換成 float 再與 k 相加,這個時候就會生產乙個臨時變數。上面的例子是 build-in type,但對於自定義的類也是同樣適用的。

一般來說,c++ 中的臨時變數在表示式結束之後 (full expression) 就被會銷毀,比如前面舉的兩個栗子,但也有例外的時候,如果這個臨時變數被用來初始化乙個引用的話,那這個臨時變數的生命週期就會被延長,直到引用被銷毀,從而不會因此產生懸空(dangling)的引用。

string proc() 

int main()

如上,第 6 行產生的臨時變數因為有 ref 指向,它的生命週期會延長至直到 main() 返回。這個特性有時很有用,比如,你可以用乙個基類的引用指向乙個子類的臨時變數,然後通過這個引用來實現多型,但又不用處理子類的銷毀。

class base() 

};class derone: public base

};class dertwo: public base

};base getbase()

derone getderone()

dertwo getdertwo()

int main()

該小技巧在 loki::scopeguard 的實現中被用到了,使得在乙個域內使用多型時,可以避免使用指標,這個寫法是這樣的巧妙以致被 andrei 稱為:」the most important const」。不過需要注意的是,臨時變數只能通過 const 引用來指向,因此是不可修改的。

C 臨時變數的生命週期

c 中的臨時變數指的是那些由編譯器根據需要在棧上產生的,沒有名字的變數。主要的用途主要有兩類 1 函式的返回值,如 1 string proc 25 6int main 7其中第 8 行會產生乙個臨時變數。但並不是所有返回值都會建立臨時變數,只有當沒有將返回值賦值給其它變數時,臨時變數才會建立。這種...

C 臨時物件的生命週期

有關臨時物件的生命週期有三種情況 1 一般情況 臨時性物件的被摧毀,應該是對完整表示式 full expression 求值過程中的最後乙個步驟。該完整表示式造成臨時物件的產生。例 include using namespace std class a a a operator const a rh...

c變數的生命週期

內部變數 生命週期 函式結束時結束.作用域 宣告的花括號中.儲存區域 棧記憶體區域.不會自動初始化.但會申請空間.外部變數 生命週期 和程式的生命週期一樣.作用域 程式的所以地方做可以使用,但需要使用extren進行宣告.儲存區域 在全域性區域.自動初始化.並生命自身的儲存空間.內部靜態變數 生命週...