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

时间:2010-03-04 16:15:17

标签: c++ return post-increment

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

class Foo
{

   ...

   int x;
   int bar() { return x++; }
 };

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

7 个答案:

答案 0 :(得分:40)

是的,它相当于:

int bar()
{
  int temp = x;
  ++x;
  return temp;
}

答案 1 :(得分:7)

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

答案 2 :(得分:5)

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

preincrement(++ x)中,在 1添加后,评估x的值。

修改:您可以在链接中比较prepost增量的定义。

答案 3 :(得分:4)

已定义。

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

答案 4 :(得分:2)

大多数编程语言,比如C ++,都是按照执行操作的顺序递归的(我对这里的编译器实际实现的代码没有任何影响)。由任何定义明确的操作组成的复合操作本身已经很好地定义,因为每个操作都是在后进先出的基础上执行的。

后递增返回在递增之前递增的变量的值,因此return操作接收该值。不必对此行为做出特殊定义。

答案 5 :(得分:0)

我认为它是已定义但不是首选。它使人们感到困惑。例如,以下代码显示1而不是2。

#include <iostream>
#include <cstdlib>

using namespace std;

int foo()
{
    int i = 1;
    return i++;
}

int main()
{
    cout << foo() << endl;

    return 0;
}

答案 6 :(得分:0)

我知道这个问题早已得到解答,但这就是为什么要对其进行定义。 复合运算符基本上是函数的语法糖。 如果您想知道从函数返回后增量是如何发生的,则不会。它恰好在运算符“功能”返回之前的值之前发生。

对于整数,请考虑如下定义的后增量运算符函数:

int post_increment(int *n)
{
    temp = *n;
    *n = *n + 1;
    return temp;
}