为什么以下程序无法编译:
#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
它给出了以下编译错误:从'int'类型的右值开始无效初始化'int&'类型的非const引用
为了使它成功编译,我有两个选项:1 . 我们必须使用“int fun(const int&x)”而不是“int fun(int&x)”2 . 使用“int i = 10; cout << fun(一世);”而不是“cout << func(10)”
因此,似乎如果我们将硬编码值传递给函数,它将被视为“const引用” .
我在这儿吗?还是上面的程序没有编译的其他原因?
1 回答
这不会编译,因为非const左值引用无法绑定到rvalues .
这样考虑一下:如果
fun
中的x
是一个非const左值引用,我们应该可以修改它 . 但是,我们传入了整数文字10
. 修改整数文字应该是什么意思?那不是't make sense, so you can't .要解决这个问题,你应该通过reference-to-const来引用你的参数(假设你不打算在
fun
中修改它):