0

当有人编码时是什么意思:

 template <class T>
 void binaryTree<T>::in_order(Node <T>* node, void (*fun)(T&))
{
    if (node == NULL)   
            return;     //<-- what does this mean here

    inorder(node->left, fun);   //<-- how does this continue here
    f(node->data);
    inorder(node->right,fun);
}

问题是你如何获得回报;不返回任何东西。这是做什么的?**注意,为了清楚起见,我已经编辑了上面的代码。

4

7 回答 7

1

这意味着当你从函数foo(y)中没有执行时。x == 1return

代码在 时继续x != 1,如果您缩进代码并将括号放在 中,if它会更清晰:

void foo(int x, int y) { 
   if(x == 1) {
      return;    //return from the function, don't proceed to foo(y)
   }
   foo(y);   
}

既没有表达式也没有花括号初始化列表的 return 语句只能用于不返回值的函数,即返回类型为 void 的函数。

在 Ideone 上查看此代码。

于 2013-10-21T06:24:18.340 回答
1

如果您将其格式化得更好,则可能更容易看到:

void foo (int x, int y)
{ 
    if (x == 1)
        return;
    foo (y);
}

如果变量x等于 ,它只会返回1。如果x不等于,则代码跳到递归调用(我真的希望真正的代码不是那样,因为当它需要两个参数时,您使用一个参数进行调用)。1foofoo

于 2013-10-21T06:24:33.440 回答
1

这意味着如果 x == 1 则函数返回而不执行 foo(y) 函数,如果 x != 1 则 foo(y) 函数执行。

于 2013-10-21T06:27:14.310 回答
1

foo是一个函数。

foo接受2个参数。两个参数都是integer。参数命名为xy

函数体测试x变量中存储的值是否等于1。如果存储的值x等于1,则函数将返回(退出)。如果存储的值x不等于 1,则函数调用foo(int x).

函数内部的foo调用可能与foo您为其提供代码的函数不同(因为它具有不同的接口/原型)。

foo第二个(接受单个参数的那个)的主体是什么?的原型可能foo为参数 x 和 y 指定了一个默认值(如果是这种情况,那么这可能是唯一的foo函数。

于 2013-10-21T06:32:09.823 回答
0

尽管缩进令人困惑,但return在条件语句中。

以下是编写该代码的一种稍微不那么令人困惑的方式:

if (x == 1)
   return;
foo (y);

在条件语句内,return仅在x == 1. 在所有情况下,foo(y)都被调用。

于 2013-10-21T06:24:42.353 回答
0

如果你习惯于看到return最后的代码,你可以将代码重写为:

void foo( int x, int y )
{
    if( x != 1 )
    {
        foo( y ) ;
    }
    else /* You can keep it to understand better visually. 
            Even if you don't keep it, the code would do the same */
    {
        return ; 
        /* returns the control to the caller code. 
           Make sure you understand that, it just returns the control but 
           without any value i.e., returning void. */
    }
}

编辑::return只是将控制权返回给调用者。如果你想返回带有某个值的控件,你会return variable_name,如果你不想返回任何东西,只是return.

现实生活中的例子::假设你被要求买一些肥皂来洗澡。现在,如果商店里有肥皂,你会回来把肥皂还给我,打电话的人会去洗澡。这是您以一些价值返回给调用者。但是假设,如果商店没有肥皂,那么你只需回到我身边,我就不用肥皂去洗澡。这是您返回给调用者但没有值。在这两种情况下,您都会返回给来电者,因为来电者正在等待进一步进行,仅在您返回时洗澡。

于 2013-10-21T06:40:04.630 回答
0

当函数返回类型为void时,可以return只写从函数返回。之后无需给出任何值return。如果返回类型是intorchar等​​等,那么必须在 之后给出一个值return

于 2013-10-21T06:49:53.140 回答