(++ i)和(i ++)之间的区别

bks*_*bks 10 c++ operator-overloading

在C++中我理解(++i)应该返回引用i因为需要连接运算符,但我无法弄清楚的是:

为什么(i++)要按i价值回报?

任何人都可以澄清一下.

Ste*_*hen 27

i++返回一个值,因为它返回i,而i增加值1.

这个的基本实现是:

int i++() {
  int old = i;
  i = i + 1;
  return old;
}
Run Code Online (Sandbox Code Playgroud)

所以,如果它返回一个引用,它将是错误的值 ......因为它i的值已经增加了!

  • 此外,它不能返回对"old"的引用,因为您无法将引用(或指针)返回到临时. (2认同)

ken*_*ytm 19

++i 可写成

prefix_inc (this) {
   increase this by 1
   return this
}
Run Code Online (Sandbox Code Playgroud)

由于i返回了真实,我们可以参考它.但是,i++看起来像

postfix_inc (this) {
   set old_this = copy of this
   increase this by 1
   return old_this
}
Run Code Online (Sandbox Code Playgroud)

因为old_this它只是一个局部变量,i++完成后它的引用是没有意义的.所以逻辑上它应该返回一个右值.