C++ R值不用于引用

C++ R值不用于引用,c++,reference,lvalue,rvalue,C++,Reference,Lvalue,Rvalue,我正在研究引用,我正在尝试一个程序,将一个右值作为引用参数传递给一个函数,如下所示 #include<iostream> using namespace std; int fun(int &x) { return x; } int main() { cout << fun(10); return 0; } #包括 使用名称空间std; int-fun(int&x) { 返回x; } int main() { cout右值只能绑定到右值引

我正在研究引用,我正在尝试一个程序,将一个右值作为引用参数传递给一个函数,如下所示

#include<iostream>
using namespace std;

int fun(int &x)
{
    return x;
}
int main()
{
    cout << fun(10);
    return 0;
}
#包括
使用名称空间std;
int-fun(int&x)
{
返回x;
}
int main()
{
cout右值只能绑定到右值引用或常量左值引用;而不能绑定到非常量左值引用。因此,这两种方法中的任何一种都可以工作:

int fun(int const & x);
int fun(int && x);
这是为了防止函数可能修改临时值而不是您认为可能修改的变量时出现意外行为,例如:

void change(int & x) {++x;}

long x = 42;
change(x);
cout << x;   // would print 42: would have changed a temporary 'int', not 'x'
void change(int&x){++x;}
长x=42;
变化(x);
cout右值只能绑定到右值引用或常量左值引用;而不能绑定到非常量左值引用。因此,这两种方法中的任何一种都可以工作:

int fun(int const & x);
int fun(int && x);
这是为了防止函数可能修改临时值而不是您认为可能修改的变量时出现意外行为,例如:

void change(int & x) {++x;}

long x = 42;
change(x);
cout << x;   // would print 42: would have changed a temporary 'int', not 'x'
void change(int&x){++x;}
长x=42;
变化(x);

cout您试图在
fun(int&x)
中传递引用。
&
符号表示“传递参数地址/引用”。当前您试图混合使用可修改的左值和常量右值,这是错误的
fun(const int&x)
可以正常工作,这可能是您想要做的。请参见您正在尝试在
fun(int&x)
中传递引用。
&
符号表示“传递参数地址/引用”。当前您试图混合可修改的左值和常量右值,这是错误的
fun(const int&x)
将很好地工作,这可能是您想要做的。请参见

对于需要更改的右值,您需要做什么?对于指针,这是一样的,您不希望能够获得指向文本的指针
10
可以吗?对于需要更改的右值,您需要做什么?对于指针,这是一样的s、 你不会期望得到一个指向文本
10
的指针吧?