簡體   English   中英

如何在C ++中返回函數類型以外的數據類型?

[英]How can I return a data type other than function type in C++?

我正在嘗試構建用於練習搜索算法的樹,並且需要訪問空指針以確保特定節點在創建時為空...但是,我不知道如何獲取指向的空指針從T&類型函數返回。 現在我已經將nullptr定義為標准

int * key = 0;

需要訪問並返回nullptr的函數是

T& getData() { ... }

我研究了隱式轉換,但是我不確定這是正確的方法,甚至是正確的方法。 另外,知道我必須在單個頭文件中構建所有內容並且不能更改主文件可能會很有用。 在此先感謝您提供的任何見解,可以幫助我了解如何解決此問題!

返回一個函數T&必須返回一個參考T ,而引用不能為NULL。 因此,您不能返回NULL-您實際上必須return *NULL; ,這顯然是無效的。

您有幾種選擇:

  1. T&轉換為T* 然后,您可以返回NULLnullptr 我建議避免將0用作NULL的符號,因為它可能會造成混淆。
  2. 引發異常。 如果getData() 應該返回到數據的引用,它可能是公平的假設,並不存在獲取數據(提供參考)是未定義的行為/錯誤,可以作這樣的處理。
  3. 根據T實際是什么(這真的是模板,還是T只是簡寫?),可以為該類型創建“ NullType”。 例如,您可能具有Data isa DataInterfaceNullData isa DataInterface
  4. 少數情況下,可以選擇返回對某種“死”數據的引用(認為/dev/null )。 我懷疑是這種情況,因為您可能想知道返回的值是無效的。 但是,在絕對必須返回數據且您沒有數據的情況下,創建靜態對象以返回這些情況可能是與錯誤報告配對的技巧。

我要說的是,您唯一特別好的選擇就是您排除的#1。

但是,我不知道如何獲取空指針以從T&類型函數返回。

你不能 如果該函數被委托返回對T的引用,則它必須返回對T的引用而不是指針。

(...除非T是指針類型,例如int*但是您仍然必須返回對int*的引用。)

如果要選擇從函數返回“無”,請使其返回一個指針,因為引用(與指針相反)總是引用某些東西。

PS:希望您不要做與此類似的事情:

T& getData() {
    T data = T(....);
    return data;   // BOOM // dont do this
}

暫無
暫無

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

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