是否将一个变量转换为另一个类型返回该变量的临时副本?如果是这样,那么为什么你不能将临时变量引用到函数中。铸造返回类型
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
变量来存储转换后的值,然后将其传递给该函数。