#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
任何人都可以解释错误的原因吗?类型'int'的非const引用从'int'类型的临时变量无效初始化
感谢
#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
任何人都可以解释错误的原因吗?类型'int'的非const引用从'int'类型的临时变量无效初始化
感谢
10
是恒定的,所以你不能引用传递给它,只是因为改变一个恒定的整个概念是奇怪。
引入引用是为了解决C(以及更早的C++)中的一个棘手问题,即所有东西都是按值传递的事实,如果想要将更改反映回调用方,则必须传入一个指针并取消引用该函数内的指针以获取实际变量(用于读取和写入该变量)。
这是认真好的东西在下一个ISO C标准。虽然有使用指针可以给我们一些关于堆栈溢出了很多代表的,它不是做世界的C程序员多好:-)
解决你的问题很简单。如果您不需要改变功能的项目,只是通过它正常:
int fun (int x) { ... }
如果做需要去改变它,好,那你必须通过一些可以进行更改:
int xyzzy = 10;
cout << fun (xyzzy);
的引用(&
)必须指向(参考)给一个变量。一个常量不能被引用。
10这里是一个常数,你要创建一个非const引用它。在一些可变任一存储器10等
int x = 10
然后将它传递到功能或使参考为const。
const int &x
它是C++ 11那么你也可以使用右值引用的概念,所以它不会给错误。
欲了解更多详情,请参阅error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
我们可以缩短这个程序到以下几点:
int& x = 10;
这个代码不工作的原因是因为10是一个右值,而右值不能结合左值引用。如果那是真的,我们可以改变文字的值(这在其他语言中是可能的,但在C++中是不可能的)。
您正在传递常量'10', –
code_hacker:引用引用变量,以便函数中的变量变化可以反映在调用函数中,但常量不能被修改,这就是为什么不能引用常量对象(和这是编译时间错误)。 –