[英]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.