C++ 右值和左值引用
我有一个函数printInt,如下所示C++ 右值和左值引用,c++,c++11,C++,C++11,我有一个函数printInt,如下所示 void printInt(const int& a) { cout<<a<<endl; } 它工作得很好。 但是当我将函数定义更改为 void printInt(int& a) { cout<<a<<endl; } 右值参考参数 void printInt(int& a) { cout<<a<<endl; } void prin
void printInt(const int& a)
{
cout<<a<<endl;
}
它工作得很好。
但是当我将函数定义更改为
void printInt(int& a)
{
cout<<a<<endl;
}
void printInt(int& a)
{
cout<<a<<endl;
}
void printInt(int&& a)
{
cout<<a<<endl;
}
void printInt(int&&a)
{
coutconst int&
是一个左值引用。问题是语言指定它可以绑定到右值。int&
也是一个左值引用,但它不能这样做。这就是为什么第一个版本可以工作,而第二个版本不能工作的原因。您可以将其视为一种机制来保存const的正确性。无需声明r参考const,您告诉编译器您可能正在对参数进行更改,但是修改temp-rvalue对象的含义是什么?语言禁止这样做。
void printInt(int&& a)
{
cout<<a<<endl;
}
void printInt(const int& a)
{
cout<<a<<endl;
}