[英]return; only with no return value
有人编码时是什么意思:
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);
}
问题是你如何得到回报? 没有返回任何东西。 这是做什么的? **注意,为清楚起见,我已经编辑了上面的代码。
这意味着从函数return
x == 1
时不执行foo(y)
。
如果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上查看此代码 。
如果格式化得更好,可能会更容易看到:
void foo (int x, int y)
{
if (x == 1)
return;
foo (y);
}
如果变量x
等于1
它将简单地返回。 如果x
不等于1
那么代码将跳到对foo
的递归调用(我真的希望真实的代码不是那样,因为您在需要两个参数的情况下使用一个参数调用foo
)。
这意味着如果x == 1,那么该函数将返回而不执行foo(y)函数;如果x!= 1,则将执行foo(y)函数。
foo
是一个函数。
foo
需要2个参数。 这两个参数都是integer
。 参数分别命名为x
和y
。
函数主体测试x
变量中存储的值是否等于1。如果x
存储的值等于1,则函数将返回(退出)。 如果x
存储的值不等于1,则该函数调用foo(int x)
。
在函数内部调用的foo
可能与您为其提供代码的foo
函数有所不同(因为它具有不同的接口/原型)。
第二个foo
(带有单个参数的那个)的主体是什么? foo
的原型有可能为参数x&y指定默认值(如果是这种情况,那么这可能是唯一的foo
函数。
尽管缩进令人困惑,但return
值仍在条件语句中。
以下是编写该代码的一种不太混乱的方法:
if (x == 1)
return;
foo (y);
在条件语句中,只有在x == 1
时才执行return
。 在所有情况下,都会调用foo(y)
。
如果你见惯了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
。
现实生活中的示例::假设您被要求购买一些肥皂洗澡。 现在,如果商店里有肥皂,您会回来将肥皂归还给我,来电者会去洗澡。 这是您将返回给调用者一些值。 但是假设,如果商店里没有肥皂,那么您只需回到我这里,我将不用任何肥皂去洗澡。 这是您返回到调用方,但没有值。 在这两种情况下,您都将返回到呼叫方,因为呼叫方仅在返回时才等待进一步沐浴。
当函数返回类型为void
,可以通过仅编写return
来从函数return
。 return
后无需给出任何价值。 如果返回类型是int
或char
等,则必须在return
之后给出一个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.