簡體   English   中英

C ++。 如何返回空指針而不是函數返回類型?

[英]C++. How to return null pointer instead of function return type?

我有一個檢查正則表達式並根據正則表達式結果返回std::vector<int>的函數。 我需要檢查功能是否失敗/成功。 成功返回矢量對象時,失敗nullptr以后再檢查if (somefunc() == nullptr) // do smth

返回類型std::vector<int>值不能為nullptr

在這種情況下,最直接的方法是返回std::unique_ptr<std::vector<int>> -在這種情況下,可以返回nullptr

其他選項:

  • 失敗時拋出異常
  • 使用optional<std::vector<int>>作為返回類型(如果編譯器具有此C ++ 17功能,則使用boost::optionalstd::optional
  • 返回bool參數,並將std::vector<int>&作為函數的輸出參數

最好的方法實際上取決於用例。 例如,如果大小為0的結果向量等於'fail'-可以在代碼中隨意使用這種知識,只需檢查返回向量是否為空即可知道函數是成功還是失敗。

在我的實踐中,我幾乎總是堅持返回optional (boost或std,取決於環境限制)。 這種接口是陳述“結果可以存在或不存在”這一事實的最清晰方法。

綜上所述-這不是唯一正確的解決方案。 上面列出了可能的選項-這僅取決於您的個人經驗和環境限制/競爭-選擇哪個選項。

您可以返回std::unique_ptr<std::vector<int>>並檢查該值,或引發異常,或檢查vector.size() == 0等。

有很多不同的選項:

  • 返回一個std::vector<int>*指針,可以選擇將其包裝在std::unique_ptr以進行生命周期管理。 失敗時返回nullptr

  • 通過參考參數傳遞std::vector ,然后返回bool以表示成功/失敗。

  • 失敗時拋出異常。

  • 返回一個std::pair<std::vector<int>, bool> ,該對的second字段表示成功/失敗。

暫無
暫無

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

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