是否將一個變量轉換爲另一個類型返回該變量的臨時副本?如果是這樣,那麼爲什麼你不能將臨時變量引用到函數中。鑄造返回類型
void func(int &i) //error converting parameter 1 from int to int&
{
}
int main()
{
double d = 6.8;
func(int(d));
}
是否將一個變量轉換爲另一個類型返回該變量的臨時副本?如果是這樣,那麼爲什麼你不能將臨時變量引用到函數中。鑄造返回類型
void func(int &i) //error converting parameter 1 from int to int&
{
}
int main()
{
double d = 6.8;
func(int(d));
}
是鑄件返回一個右值(臨時值),但可變的參考需要一個左值。
試試這個:
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)
將是更有效的。)
的問題是,當你做int(d)
電話裏面func
,它會創建一個臨時對象。您不能將引用綁定到臨時。至少,直到C++ 0x到來,我們得到右值引用(一些編譯器已經支持它們,但是實現可能不完全穩定)。您需要定義一個int
變量來存儲轉換後的值,然後將其傳遞給該函數。