我正在研究引用,我正在尝试一个程序将rvalue传递给函数作为引用参数,就像这样。
#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
cout << fun(10);
return 0;
}
但这并没有奏效,当我试图传递一个左值时,它有效。
#include<iostream>
using namespace std;
int fun(int &x)
{
return x;
}
int main()
{
int x=10;
cout << fun(x);
return 0;
}
有人能解释我为什么会这样吗?
答案 0 :(得分:6)
rvalue 只能绑定到 rvalue 引用或const
左值引用;不是非const 左值引用。所以这些都可以起作用:
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'
答案 1 :(得分:0)
您正尝试在fun(int &x)
中传递引用。 &
符号表示&#34;传递参数地址/引用&#34;。目前你正试图混合可修改的左值和常量右值,这是错误的
fun(const int &x)
可以正常工作,这可能就是你想要做的。见this