#include<iostream.h>
int main()
{
int m = 2;
int &x = m++;
cout<<m;
return 0;
}
这段代码应该给出 OUTPUT: 3
但是这段代码给出了错误: 无效初始化'int&amp;'类型的非const引用来自临时的'int'类型。
答案 0 :(得分:7)
后递增运算符在递增之前返回值为m
的临时对象。
非const
左值引用不能绑定到临时对象。因此,编译器正确地抱怨。
答案 1 :(得分:6)
m++
必须增加m
(作为副作用),但要评估原始值。它通过在递增之前返回一个保持m
值的临时变量来实现。
非const l值引用无法绑定到临时对象。
你可以写:
int &x = ++m;
这是有效的,因为预增量运算符必须在增量之后返回值,因此能够计算到m
的l值引用。
但为了清楚起见,我不建议这样做。
答案 2 :(得分:2)
您不能使用帖子增量来分配引用 - 它是一个临时对象
答案 3 :(得分:2)
下面
int &x = m++;
您正在将一个临时对象(右侧)分配给一个没有任何意义的参考(左侧)。
相反,写:
int&amp; x = ++ m;