2013-10-21 57 views
0

是什么意思,当有人代码:return;唯一没有返回值

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); 
} 

的问题是,你怎么有回报;不返回任何东西。这是做什么的? **请注意,为了清晰起见,我编辑了上面的代码。

+0

我编辑了代码,使问题更加清晰 – user2884789

+0

回答问题后,我滚动起来时,它吓到了我。整个片段被改变了:-) – Abhineet

+0

是的,我的糟糕的是把废话代码开始。 – user2884789

回答

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的this code

+0

@Ashokkuttuva我没有说它会执行,我说,它会执行,如果'x'是**不是** 1. – Maroun

1

如果你更好的格式它可能是更容易地看到:

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

它只返回如果变量x等于1。如果x而不是等于1那么代码跳转到递归调用foo(我真的希望真正的代码不是这样,因为你打电话foo有一个参数,当它需要两个)。

0

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

以下是编写代码略少混乱的方式:

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

身为条件语句中,return只有当x == 1执行。在所有情况下,都会调用foo(y)

+0

foo(y)不会被称为更多,因为它只有一个arg而不是两个。 –

+0

@Ashokkuttuva这是废话,取决于我们在本示例中没有看到的声明。 –

+0

@ g-makulik我同意 –

1

这意味着如果x == 1,那么函数在不执行foo(y)函数的情况下返回,如果x!= 1,那么执行foo(y)函数。

1

foo是一个函数。

foo需要2个参数。这两个参数都是integer。这些参数被命名为xy

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

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

第二个foo(采用单个参数的那个)的主体是什么?这可能是的foo原型指定的参数X &为y的默认值(如果是这样的话,那么这可能是唯一的foo功能。

+0

您无法真正知道只要我们没有看到它的声明(想到参数默认值),'foo(y)'就会调用一个不同的函数! –

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

真实案例:: 假设您已被要求购买一些沐浴肥皂。现在,如果在商店有肥皂,你会回来,给我回肥皂,来电者会去洗澡。这是你正在返回给调用者一些有价值的东西。但是,假设,如果商店没有肥皂,那么你只要简单地回到我身边,我就会没有任何肥皂就去洗澡。这是你正在返回给调用者,但没有价值。在这两种情况下,你都会回到打电话的人,因为打电话的人只能等你回来才能继续洗澡。

0

当功能返回类型为void时,只能通过编写return从函数返回。在return之后无需给出任何值。 如果返回类型为intchar等,则必须在return之后给出值。