臨時變數是只在呼叫期間有效,具有常性的一種變數。
在返回值以值傳遞(傳值和傳指標)的形式返回時,會生成臨時變數。
int sum(int a,int b)
編譯器會將結果a+b的值拷貝給臨時變數,最終返回的是臨時變數;
在函式呼叫中,如果形參是引用的型別的情況下:當實參和形參的型別不匹配會產生臨時變數;
string foo();
void bar(string &s);
bar(foo());//非法,型別不匹配,生成臨時變數,臨時變數是const型別,而形參是非const型別
bar("hello");//非法
如果形參是常引用型別:
當型別匹配,但不是左值,會產生臨時變數;
當型別不匹配,但是可以轉換為正確的型別時,會產生臨時變數;
double refcube(const double& ra)
double side = 3.0;
double* pd = &side;
double& rd = side;
long edge = 5l;
double lens[4]=;
double c1 = refcube(side); // ra 是side
double c2 = refcube(lens[2]); // ra是lens[2]
double c3 = refcube(rd); // ra 是 rd
double c4 = refcube(*pd); // ra 是*pd
double c5 = refcube(edge); // ra 是臨時變數
double c6 = refcube(7.0); // ra 是臨時變數
double c7 = refcube(side+10.0); // ra 是臨時變數
long型別和double型別不匹配,產生臨時變數;7.0、side + 10.0與double型別相對應,但由於不是左值,也產生臨時變數;這些臨時變數只是在函式呼叫期間存在;
到這裡可能會有乙個疑問,既然被調函式的引數列表型別中加const和不加const都會產生臨時變數,那為什麼還要加const?
1、在有必要時產生臨時變數,保證原始資料不被修改。
2、保證**合法;如果沒有const型別修飾,在型別不匹配時,在呼叫點會產生臨時變數,就會嘗試使const型別轉換為非const型別,當然,這樣是非法的;有const型別修飾的情況下產生臨時變數,操作的也是臨時變數;根本來講,這一點也是為了保證原始資料不被修改。
強轉型別轉化,一定有臨時變數。
double a = 10.5;
cout << (int)a ;
cout << a;
輸出:10和10.5
所以在強轉時,一定生成臨時變數,原始資料本身並沒有改變。
什麼情況下會初始化類
都什麼情況下會初始化類 public class a static public void run public void service public class b extends a public static void main string args 答案 static block a s...
mysql什麼情況下會觸發表鎖
在上面講到的併發事務處理帶來的問題中,更新丟失 通常是應該完全避免的。但防止更新丟失,並不能單靠資料庫事務控制器來解決,需要應用程式對要更新的資料加必要的鎖來解決,因此,防止更新丟失應該是應用的責任。髒讀 不可重複讀 和 幻讀 其實都是資料庫讀一致性問題,必須由資料庫提供一定的事務隔離機制來解決。資...
Kafka在什麼情況下會丟資料
kafka是高吞吐量資料匯流排,使用得當會使我們處理業務如魚得水,如虎添翼。處理不當也會使系統殘破不堪,維護起來痛苦萬分,我們針對資料可靠性這點,來分析下這個訊息元件在什麼情況下會丟失資料。一 producer配置acks 0 在acks 0模式下,訊息傳輸到broker端沒收到broker的反饋即...