赋值给参考c ++后增量

时间:2015-09-14 08:59:18

标签: c++ reference post-increment

假设我有这段代码:

int i = 2;
int &ref = i++;

现在,我明白参考不能用rvalue初始化, 但是我无法理解为什么ref没有使用左值初始化,这意味着i,然后i递增。

此外,在以下情况中:

   int i = 2;
   const int &ref = i++;
   cout << ref << endl;
将打印

2,这意味着ref在递增之前使用i初始化,即使用lval初始化。 之后ref递增,但ref是常量。

有人可以解释一下我在这里缺少的东西吗?

2 个答案:

答案 0 :(得分:3)

增加int后不会产生左值。假设的实现可能如下所示:

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

如您所见,需要制作副本并按值返回。

预增量会导致左值,因为不需要复制,因此结果是对原始值的引用。

你的第二个例子是有效的,因为rvalues可以绑定到const-references。

答案 1 :(得分:1)

i++不会返回i,而是一个临时副本,它是在我增加之前拍摄的。 这就是为什么它被称为POST增量,因为它在保留当前状态的副本之后递增了变量。