【发布时间】:2016-05-28 00:46:10
【问题描述】:
最近我编写了一个函数,它正在对双数进行一些处理,但由于一些变化,我需要对整数进行相同的处理,以便用下面给出的更简单的例子来缩短长话短说:
void display(double& arg)
{
std::cout << arg << std::endl;
}
int main()
{
int inum = 10;
display(inum);
return 0;
}
我发现上面的代码没有编译并给出错误“类型“double &”(非 const 限定)的引用不能用“int”类型的值初始化,因为错误非常直观,所以我修改了代码并将显示函数的参数更改为 const double& arg 并且一切似乎都正常工作。所以我的问题是
在“const double&”的情况下到底发生了什么?需要完整的解释吗?
现在在阅读了提供的一些解释和问题链接后,我了解到转换会产生右值,而右值不能绑定到临时变量,所以我要寻找的唯一理由是为什么转换会产生右值?
【问题讨论】:
-
将其设为 const 允许编译器为参数构造一个临时变量。
-
我相信临时变量是右值,但这里 inum 是左值,所以编译器也将左值转换为临时变量?
-
@Kapil 编译器需要一个双精度的左值。传递引用意味着被调用者可以修改值,并且传递临时作为引用是没有意义的,除非它是 const。否则被调用者可以进行修改而看不到任何效果,这只会让你感到困惑。