0. 局部變量 vs 臨時變量 void swap (int&a, int &b) { int tmp=a; a=b; b=tmp; } 上面這段程序里的tmp變量實際上是局部變量而不是臨時變量。臨時變量有兩個特征:1.invisiable,在程序代碼中沒有顯式出現 2 沒有名字 non-named。 出現臨時變量/對象的場合 1.函數的返回值 2. 參數傳遞 2,1 值傳遞 by -value 2.2 采用 const-reference時,且需要轉換時,例如 double d; const int &ref=d; 實際上,編譯器作了一次變化 int tmp=d; const int & ref=tmp; 3. ++ --的后置運算符。它們總是生成一個臨時對象tmp=原對象,對原對象進行操作。但返回tmp 4. 對象間的隱式轉換,例如 string str; str=“abc”;
當參數為非常數引用 reference to non-const時,則不會產生臨時變量。
|