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)
我们可以将此程序缩短为以下内容:
int& x = 10;
Run Code Online (Sandbox Code Playgroud)
这段代码不起作用的原因是因为10是一个rvalue,并且rvalues不能绑定到lvalue-references.如果这是真的,我们将能够改变文字的值(这在其他语言中是可能的,但在C++中是不可能的).