8
#include<iostream>
using namespace std;

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

谁能解释错误的原因?

谢谢

4

4 回答 4

15

10是一个常数,所以你不能传递对它的引用,仅仅是因为改变常数的整个概念很奇怪。

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

这是在下一个 ISO C 标准中非常好的东西。虽然不得不使用指针可能会让我们中的一些人在 Stack Overflow 上获得很多声誉,但这对世界上的 C 程序员来说并没有多大好处 :-)

您的问题的解决方案很简单。如果不需要改变函数中的item,正常传递即可:

int fun (int x) { ... }

如果您确实需要更改它,那么您必须传递一些可以更改的内容:

int xyzzy = 10;
cout << fun (xyzzy);
于 2013-05-27T06:19:20.040 回答
5

我们可以将此程序缩短为以下内容:

int& x = 10;

这段代码不起作用的原因是 10 是一个右值,而右值不能绑定到左值引用。如果这是真的,我们将能够更改文字的值(这在其他语言中是可能的,但在 C++ 中是不可能的)。

于 2013-05-27T15:29:19.487 回答
2
于 2013-05-27T06:21:43.900 回答
1

引用 ( &) 必须指向(引用)变量。不能引用常量。

于 2013-05-27T06:20:41.043 回答