对引用赋值的后增量

Post-increment in assignment to reference c++

本文关键字:引用 赋值      更新时间:2023-10-16

假设我有以下代码:

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是const。

有人能解释一下我在这里错过了什么吗?

int进行后加不会产生左值。假设的实现可能是这样的:

int operator++(int& i) {
    int temp = i;
    ++i;
    return temp;
}

如您所见,需要进行复制,并通过value返回。

预增量的结果是左值,因为不需要复制,所以结果是对原始值的引用。

第二个例子可以工作,因为右值可以绑定到const的引用。

i++不返回i,而是一个临时副本,这是在我得到增加之前采取的。这就是为什么它被称为POST增量,因为它在保留当前状态的副本后对变量进行增量。

Post对整型数加1不会返回左值。i++在自增之前返回一个临时副本