假设我有这段代码:
int i = 2;
int &ref = i++;
现在,我明白引用不能用右值初始化,
但我不明白为什么 ref
没有用左值初始化,意思是这里 i
,然后 i
递增。
此外,在以下情况下:
int i = 2;
const int &ref = i++;
cout << ref << endl;
2
会被打印出来,意思是ref
在自增前用i
初始化,即用lval初始化。
之后 ref
递增,但 ref
是常量。
有人可以解释一下我在这里缺少什么吗?
最佳答案
int
后递增不会产生左值。假设的实现可能如下所示:
int operator++(int& i) {
int temp = i;
++i;
return temp;
}
如您所见,需要制作一个拷贝,并按值返回。
预增量确实会产生左值,因为不需要拷贝,因此结果是对原始文件的引用。
您的第二个示例有效,因为右值可以绑定(bind)到对常量的引用。
关于c++ - 分配给引用 c++ 的后增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32560823/