c++ - 分配给引用 c++ 的后增量

标签 c++ reference post-increment

假设我有这段代码:

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 是常量。

有人可以解释一下我在这里缺少什么吗?

最佳答案

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

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

如您所见,需要制作一个拷贝,并按值返回。

预增量确实会产生左值,因为不需要拷贝,因此结果是对原始文件的引用。

您的第二个示例有效,因为右值可以绑定(bind)到对常量的引用。

关于c++ - 分配给引用 c++ 的后增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32560823/

相关文章:

c - for 循环中的 post 和 pre 增量。 C 中没有库函数的字符串长度

c++ - 当 T==void 时如何最好地解决 "void foo( const T& t = T() )"

c++ - 给定类型的模板化中间数组

mysql - 即使在所有可能的组合之后创建 TABLE 时也会出现 FOREIGN KEY 错误

c++ - C/C++ 后置递增不止 1

c - 在 printf 中发布增量和指针

c++ - 在 do...while 中放置一个开关

c++ - 返回类型与返回类型 (operator++) 不相同也不协变

c# - 如何引用Microsoft.Office.Interop.Excel dll?

arrays - 为什么 Perl 有时会回收引用?