为什么使用'operator ++'进行引用初始化会产生错误

kri*_*ant 2 c++ reference

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

这段代码应该给出OUTPUT:3

但是这段代码给出了错误:从类型为'int'的临时类中初始化'int&'类型的非const引用.

101*_*010 7

后增量运算符返回一个临时对象,其值为mincrement.非const左值引用不能绑定到临时对象.因此,编译器正当地抱怨.


bol*_*lov 6

m++必须增加m(作为副作用),但要评估原始值.它通过返回一个保持m在增量前的值的临时变量来做到这一点.

非const l值引用不能绑定到临时对象.

你可以写:

int &x = ++m;
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为预增量运算符必须在增量之后返回值,从而能够计算到l值引用m.

但为了清楚起见,我不建议这样做.