2010-07-03 161 views
0

是否將一個變量轉換爲另一個類型返回該變量的臨時副本?如果是這樣,那麼爲什麼你不能將臨時變量引用到函數中。鑄造返回類型

void func(int &i) //error converting parameter 1 from int to int& 
{ 
} 

int main() 
{ 
    double d = 6.8; 
    func(int(d)); 
} 

回答

1

是鑄件返回一個右值(臨時值),但可變的參考需要一個左值。

試試這個:

int main() { 
    double d = 6.8; 
    { 
     int v = d; 
     func(v); 
     d = v; // if the change needs to be reflected back to d. 
     // note that, even if `func` doesn't change `v`, 
     // `d` will always be truncated to 6. 
    } 
} 

如果func不打算修改i,輸入參數應該是一個常量參考,這可以接受右值。

void func(const int& i); 

(但對於原語func(int i)將是更有效的。)

0

的問題是,當你做int(d)電話裏面func,它會創建一個臨時對象。您不能將引用綁定到臨時。至少,直到C++ 0x到來,我們得到右值引用(一些編譯器已經支持它們,但是實現可能不完全穩定)。您需要定義一個int變量來存儲轉換後的值,然後將其傳遞給該函數。