是返回x ++的行为; 界定?

pat*_*ros 21 c++ return post-increment

如果我有一个带有实例方法和变量的类

class Foo
{

   ...

   int x;
   int bar() { return x++; }
 };
Run Code Online (Sandbox Code Playgroud)

是否定义了返回后递增变量的行为?

Pet*_*der 40

是的,它相当于:

int bar()
{
  int temp = x;
  ++x;
  return temp;
}
Run Code Online (Sandbox Code Playgroud)

  • @Pavel:我不同意.具有重载后增量运算符且未实现正确的增量后语义的类是错误的. (4认同)
  • @Pavel:我把它从`x ++'改为`++ x`,否则我会用'x ++'来定义`x ++`,我倾向于避免使用循环定义.另外,我不认为这是一个错误,就像我没有澄清我的代码只适用于没有#define的temp或bar ...此外,我的例子只描述了"int"的操作,它是100%正确的. (4认同)

ant*_*res 7

是的,它会在递增之前返回x的值,之后x的值将为+ 1 ......如果重要的话.


cod*_*ict 6

它被定义。

它返回x增量前的值。如果x是局部(非静态)变量,则此后增量无效,因为一旦函数返回,函数的局部变量就不再存在。但是如果x是局部静态变量、全局变量或实例变量(如您的情况),其值将在返回后递增。

  • @Dario 是的,会的。“return”后面的表达式将在执行 return 之前完全计算。 (2认同)

Miz*_*zor 6

是.

postincrement(x ++)中,在添加1 之前评估x的值(在您的情况下返回).

preincrement(++ x)中,添加1 之后评估x的值.

编辑:您可以比较的定义的增量中的链接.