【问题标题】:Can a function in C++ return something and then execute its code?C++ 中的函数可以返回一些东西然后执行它的代码吗?
【发布时间】:2020-06-30 13:04:39
【问题描述】:

当做这样的事情时:

i2 = i++;

++ 运算符将返回i,然后将i 加一。

函数也可以返回一些东西然后执行它的代码吗?

【问题讨论】:

  • 没有。 i++ 存储旧值,然后执行其代码(增量),然后返回存储的值。
  • 这在什么实际情况下有用?
  • 如果iinti++ 不会返回任何内容。这不是一个函数。它是一个表达式,它的值是i 的旧值。表达式值;函数返回值。他们不是一回事。当一个函数返回时,它就完成了;它无能为力。
  • 你可以看看这个question,用户讨论return i++表达式的使用。一些答案指出编译器无论如何都会生成更长的代码,就好像你写了int result = i; ++i; return result;一样。所以这并不重要。
  • 向我们展示你想做什么而不是如何你想这样做。

标签: c++ operators


【解决方案1】:

不,一旦函数的作用域结束(在结束时}),就不能再执行代码了。

但是,该函数可以存储输入的旧状态,修改输入,并返回输入的旧值。这给出了在函数返回值之后执行代码的效果。举个例子:

int f(int &n) {
  int x = n;    // store input
  n = 42;       // input is modified before return
  return x;     // old input is returned
}

int b = f(a);  // b is equal to a
               // but now a is 42

正如您所观察到的,后增量是此类行为有用的一个示例。另一个例子是std::exchange,它给出了修改输入的外观返回一个值之后。

【讨论】:

    【解决方案2】:

    如果你自己实现后缀增量,你会先存储原始值,然后使用增量但仍然返回原始值:

    Number Number::operator++ (int)
    {
      Number ans = *this;
      ++(*this);
      return ans;
    }
    

    您可以查看此常见问题以了解更多详细信息:https://isocpp.org/wiki/faq/operator-overloading#increment-pre-post-overloading

    所以C++中return后没有函数代码执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      相关资源
      最近更新 更多