2013-05-27 46 views
3
#include<iostream> 
using namespace std; 

int fun(int &x) 
{ 
    return x; 
} 
int main() 
{ 
    cout << fun(10); 
    return 0; 
} 

任何人都可以解释错误的原因吗?类型'int'的非const引用从'int'类型的临时变量无效初始化

感谢

+0

您正在传递常量'10', –

+0

code_hacker:引用引用变量,以便函数中的变量变化可以反映在调用函数中,但常量不能被修改,这就是为什么不能引用常量对象(和这是编译时间错误)。 –

回答

10

10是恒定的,所以你不能引用传递给它,只是因为改变一个恒定的整个概念是奇怪。

引入引用是为了解决C(以及更早的C++)中的一个棘手问题,即所有东西都是按值传递的事实,如果想要将更改反映回调用方,则必须传入一个指针并取消引用该函数内的指针以获取实际变量(用于读取和写入该变量)。

这是认真好的东西在下一个ISO C标准。虽然有使用指针可以给我们一些关于堆栈溢出了很多代表的,它不是做世界的C程序员多好:-)

解决你的问题很简单。如果您需要改变功能的项目,只是通过它正常:

int fun (int x) { ... } 

如果需要去改变它,好,那你必须通过一些可以进行更改:

int xyzzy = 10; 
cout << fun (xyzzy); 
1

的引用(&)必须指向(参考)给一个变量。一个常量不能被引用。

5

我们可以缩短这个程序到以下几点:

int& x = 10; 

这个代码不工作的原因是因为10是一个右值,而右值不能结合左值引用。如果那是真的,我们可以改变文字的值(这在其他语言中是可能的,但在C++中是不可能的)。

相关问题