[英]Is the behavior of return x++; defined?
例如,如果我有一个带有实例方法和变量的类
class Foo
{
...
int x;
int bar() { return x++; }
};
是否定义了返回后递增变量的行为?
是的,它相当于:
int bar()
{
int temp = x;
++x;
return temp;
}
是的......它会在增加它之前返回x的值,之后x的值将是+ 1 ...如果它很重要。
它被定义。
它在递增之前返回x
的值。 如果x
是局部(非静态)变量,则此后增量无效,因为一旦函数返回,函数的局部变量就不再存在。 但是,如果x
是局部静态变量、全局变量或实例变量(如您的情况),则其值将在返回后递增。
大多数编程语言,比如 C++,都是按照操作执行的顺序递归的(我在这里没有暗示编译器实际上是如何实现代码的)。 由任何明确定义的操作组成的复合操作本身就是明确定义的,因为每个操作都是在后进先出的基础上执行的。
后增量在递增之前返回正在递增的变量的值,因此return
操作接收该值。 无需对此行为进行特殊定义。
我知道这个问题很久以前就得到了回答,但这就是它被定义的原因。 复合运算符基本上是函数的语法糖。 如果您想知道从函数返回后增量是如何发生的,它不会。 它发生在运算符“函数”返回前一个值之前。
对于整数,想想像这样定义的后增量运算符函数:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.