[英]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
這是在二叉樹中查找n1
和n2
的最小公共祖先的代碼
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.