簡體   English   中英

如果沒有從具有返回類型 integer 或指針的 function 中的 c++ 顯式返回任何值,則從 function 隱式返回什么值

[英]What value is returned from a function implicitly if no value is returned explicitly from a function in c++ that has a return type integer or pointer

這是在二叉樹中查找n1n2的最小公共祖先的代碼

Node * lca (Node* root, int n1, int n2)
{
  if (root == NULL)
    return NULL;

  if (root->data == n1 or root->data == n2)
    return root;
  
  Node *l = lca(root->left, n1, n2);
  Node *r = lca(root->right, n1, n2);
  
  if (l and r)
    return root;

  //return (l != NULL) ? l : r;
}

我拿了一個隨機的二叉樹,如下所示

    1
   / \
  2   3
 / \ / \
4  5 6  7

當 function 調用轉到值為 5 的節點時,沒有指向返回給調用者 function 的節點的指針。那么在這種情況下, r分配什么值?

我嘗試假設默認情況下它返回一個 NULL 指針,所以if (r == NULL) ,我嘗試打印一個數字,但我在 output 中沒有得到任何值。

我嘗試像 javascript 那樣使用關鍵字undefined但無濟於事。 它顯示錯誤。 在具有返回類型的 function 中不返回任何值是什么意思?

如果您的 function 聲明了除void以外的返回類型,並且在調用 function 時在沒有中間return語句的情況下達到結束} ,則您的程序具有未定義的行為

未定義的行為意味着您失去了對程序行為的任何保證。 任何結果都是可能的。 它的行為就像你寫了return NULL; ,它可以表現得好像返回一個隨機值,它可以表現得好像調用從未發生過並且它不必以任何方式保持一致。 這不僅適用於有問題的 function 調用,而且適用於整個程序(具有給定輸入),以及導致 function 調用的部分。 這樣的程序根本無效且損壞。 考慮它的行為是沒有意義的。

所以不要那樣做。 如果啟用警告,編譯器將警告您可能會超出非void function 的末尾。 如果你的沒有,那么檢查如何為你的編譯器啟用更高的警告級別。

我嘗試像 javascript 那樣使用關鍵字 undefined 但無濟於事。

沒有與 C++ 中的等效項。

此外,如果您來自 javascript,那么您需要特別小心,因為 javascript(據我所知)沒有等效於 C 和 C++ 的未定義行為 理解這個概念的重要性並記住是什么情況導致的,是來自其他語言的新用戶似乎經常遇到的問題。 在 C 和 C++ 中,如果您的程序被破壞,您不能保證在編譯或運行時收到警告或錯誤通知。 它只會有任意行為,在未定義的行為下可能會或可能不會按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM