#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
有人能解释错误的原因吗?
由于
答案 0 :(得分:12)
10
是常量,所以你不能传递对它的引用,只是因为改变常量的整个概念是奇怪的。
引入了引用来解决C(和早期的C ++)中棘手的问题之一,事实上一切都是通过值传递的,如果你想让一个更改反映回调用者,你必须传入一个指针和取消引用函数中的指针获取实际变量(用于读取和写入)。
在下一个ISO C标准中,这是认真的好处。虽然必须使用指针可能会给我们中的一些人提供很多关于Stack Overflow的代表,但它并没有让世界上的C程序员做得更好: - )
解决问题的方法很简单。如果不需要更改函数中的项目,只需正常传递:
int fun (int x) { ... }
如果您做需要更改它,那么您必须传递可以更改的内容:
int xyzzy = 10;
cout << fun (xyzzy);
答案 1 :(得分:5)
我们可以将此计划缩短为以下内容:
int& x = 10;
此代码不起作用的原因是因为10是rvalue,并且rvalues无法绑定到lvalue-references。如果这是真的,我们将能够更改文字的值(这在其他语言中是可能的,但在C ++中不可能)。
答案 2 :(得分:2)
10这里是一个const数,你试图创建一个非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’
答案 3 :(得分:1)
引用(&
)必须指向(引用)变量。不能引用常量。