铸造返回类型

时间:2010-07-03 18:45:34

标签: c++

将变量转换为其他类型是否会返回该变量的临时副本?如果是,那么为什么不能将临时变量引用到函数中。

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

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

2 个答案:

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