我有一个函数printInt,如下所示。
void printInt(const int& a)
{
cout<<a<<endl;
}
当我使用以下参数调用函数时,如
int a=5;
printInt(a);
printInt(5);
完美无缺。 但是当我将函数定义更改为
时void printInt(int& a)
{
cout<<a<<endl;
}
这会给通话printInt(5)
带来错误。现在我的问题是为什么const int&
既是左值和右值引用,而int&
也只是左值引用。据我所知int&&
是左值参考。那么如何单一&amp;可以参考右值参考?
总结我的问题:
左值参考参数
void printInt(int& a)
{
cout<<a<<endl;
}
Rvalue参考参数
void printInt(int&& a)
{
cout<<a<<endl;
}
左值和左值。但是如何?
void printInt(const int& a)
{
cout<<a<<endl;
}
答案 0 :(得分:9)
const int&
是左值参考。问题在于语言指定它可以绑定到rvalues。 int&
也是左值引用,但它不能这样做。这就是为什么第一个版本有效,第二个版本没有。