从'int'类型的临时类型初始化'int&'类型的非const引用

dar*_*dow 7 c++ reference temporary rvalue lvalue

#include<iostream>
using namespace std;

int fun(int &x)
{
    return x;
}
int main()
{
    cout << fun(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释错误的原因吗?

谢谢

pax*_*blo 13

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

引用引用来解决C(和早期的C++)中棘手的问题之一,事实上所有内容都是通过值传递的,如果你想让一个更改反映回调用者,你必须传入一个指针并取消引用函数中的指针获取实际变量(用于读取和写入).

在下一个ISO C标准中,这是非常好的.虽然不得不使用指针可能会给我们中的一些人提供很多关于Stack Overflow的代表,但它并没有让世界上的C程序员做得更好:-)

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

int fun (int x) { ... }
Run Code Online (Sandbox Code Playgroud)

如果你确实需要改变它,那么你必须传递一些可以改变的东西:

int xyzzy = 10;
cout << fun (xyzzy);
Run Code Online (Sandbox Code Playgroud)


0x4*_*2D2 5

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

int& x = 10;
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用的原因是因为10是一个rvalue,并且rvalues不能绑定到lvalue-references.如果这是真的,我们将能够改变文字的值(这在其他语言中是可能的,但在C++中是不可能的).