将变量转换为其他类型是否会返回该变量的临时副本?如果是,那么为什么不能将临时变量引用到函数中。
void func(int &i) //error converting parameter 1 from int to int&
{
}
int main()
{
double d = 6.8;
func(int(d));
}
答案 0 :(得分:1)
是cast会返回一个rvalue(临时值),但 mutable 引用需要一个左值。
请改为尝试:
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
,则输入参数应为 const 引用,可以接受右值。< / p>
void func(const int& i);
(但对于原语func(int i)
会更有效率。)
答案 1 :(得分:0)
问题在于,当您在int(d)
的调用中执行func
时,它会创建一个临时对象。您不能将引用绑定到临时。至少,直到C ++ 0x出现并且我们得到rvalue引用(一些编译器已经支持它们,但实现可能不完全可靠)。您需要定义一个int
变量来存储转换后的值,然后将其传递给函数。