【发布时间】:2015-07-07 09:27:16
【问题描述】:
我有一个如下所示的 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&& 是一个右值引用。那么单个 & 是如何引用右值引用的呢?
总结一下我的问题:
-
左值参考参数
void printInt(int& a) { cout<<a<<endl; } -
右值参考参数
void printInt(int&& a) { cout<<a<<endl; } -
左值和右值。但是怎么做?
void printInt(const int& a) { cout<<a<<endl; }
【问题讨论】:
-
您可以将其视为一种保存 const 正确性的机制。如果没有将您的引用声明为 const,您是在告诉编译器您可能正在对参数进行更改,但是修改临时右值对象的含义是什么?语言禁止它。