2013-10-21 64 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之後給出值。