繁体   English   中英

是return x++的行为; 定义?

[英]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是局部静态变量、全局变量或实例变量(如您的情况),则其值将在返回后递增。

是的。

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

preincrement (++x) 中,在加1计算 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM