2010-07-03 131 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变量来存储转换后的值,然后将其传递给该函数。