例如,如果我有一个带有实例方法和变量的类
class Foo
{
...
int x;
int bar() { return x++; }
};
返回后递增变量的行为是否已定义?
例如,如果我有一个带有实例方法和变量的类
class Foo
{
...
int x;
int bar() { return x++; }
};
返回后递增变量的行为是否已定义?
Yes, it's equivalent to:
int bar()
{
int temp = x;
++x;
return temp;
}
是的……它会在增加 x 之前返回 x 的值,之后 x 的值将是 + 1 ……如果重要的话。
It is defined.
It returns the value of x
before incrementation. If x
is a local(non-static) variable this post incrementation has no effect since local variables of a function cease to exist once the function returns. But if x
is a local static variable, global variable or an instance variable( as in your case), its value will be incremented after return.
大多数编程语言,如 C++,都是按照执行操作的顺序递归的(我没有暗示这里的代码是如何由编译器实际实现的)。由任何定义良好的操作组成的复合操作本身就是定义良好的,因为每个操作都是在后进先出的基础上执行的。
Post-increment在递增变量之前返回要递增的变量的值,因此return
操作会接收该值。不必对此行为进行特殊定义。
我知道这个问题很久以前就得到了回答,但这就是定义它的原因。复合运算符基本上是函数的语法糖。如果你想知道从函数返回后增量是如何发生的,它不会。它发生在运算符“function”返回前一个值之前。
对于整数,请考虑如下定义的后自增运算符函数:
int post_increment(int *n)
{
int temp = *n;
*n = *n + 1;
return temp;
}
我认为它已定义但不是首选。它给人们带来了困惑。例如,以下代码打印 1 而不是 2。
#include <iostream>
#include <cstdlib>
using namespace std;
int foo()
{
int i = 1;
return i++;
}
int main()
{
cout << foo() << endl;
return 0;
}