为什么用' operator ++'进行参考初始化?给出错误

时间:2014-08-06 09:58:12

标签: c++ reference

#include<iostream.h> 
int main()
{
    int m = 2;
    int &x = m++;
    cout<<m;
    return 0; 
}

这段代码应该给出 OUTPUT: 3

但是这段代码给出了错误: 无效初始化'int&amp;'类型的非const引用来自临时的'int'类型。

4 个答案:

答案 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;