c 有沒有優雅的返回空引用方式?

時間 2021-06-01 05:31:53

1樓:

可以搞乙個std::pair嗎?根據bool判斷V是否是有效的,為false時,second為V()的預設構造。感覺這樣開銷有點大

更新:用std::optional也可以

2樓:stay

看看stl是怎麼做的

std::map::at - cppreference.com

返回到擁有等於 key 的關鍵的元素被對映值的引用。若無這種元素,則丟擲 std::out_of_range 型別異常。

3樓:「已登出」

effective cpp沒看吧

不要返回臨時物件的引用

要想避免物件被拷貝,用右值引用吧

或者是類只儲存乙個impl指標,直接進行淺拷貝看到有人回答用static解決懸空引用的問題那麼,static一般都是執行緒不安全的

用不用看場景唄

4樓:張強

除非改為引用傳參,否則作為返回值都不優雅,除了是在成員函式中返回*this,因為一定能保證可以返回可引用的物件this

這個問題最好解決方法就是修改為引用傳參,函式改為返回int或bool,表示是否成功,呼叫者再通過返回值計畫程式流程

5樓:不懂

需要判斷空的返回指標,不需要的才可以返回引用。

非要判斷引用為空那就返回乙個static的物件的引用,前提是這個型別有判斷為空的方式,比如某個引數為0

看了下你是返回查表結果,這種情況最好還是返回指標。

6樓:凌人

我覺得空引用的確也有一定作用,所以寫了這麼乙個模組,不過 gnu 系列編譯器是假定引用不會繫結到空位址的,所以在判斷時需要 volatile 讀取。

需要注意的是,帶空引用返回值必須要用引用接收,不然會出現 nullptr 解引用錯誤。

7樓:飛翔的荷蘭豬

std::optional應該滿足要求。

但是這樣寫沒有意義。

呼叫getpath拿到optional返回值之後,依然要調optional的has_value判斷是否有值才能用。

像這種有可能不存在值的情況,呼叫方是必然要進行判斷的,不如直接給呼叫方兩個介面,乙個查詢值是否存在,乙個取值。

8樓:XZiar

想要可能為空的引用,那就指標唄。引用的乙個作用就是弱保證非空(直接*nullptr型別不匹配),既然不能保證了,那就沒必要用引用了。

有人說的optional用在這個場景裡就不太好,因為返回引用不保證生命週期,optional應該是承載著生命週期的轉移。

智慧型指標也是包含了生命週期管理的。但如果CDijkstraGraph本身是繼承了enable_shared_from_this,即Graph本身是shared,並擁有Node的話,可以用別名建構函式,返回的node分享graph的生命週期,不用把Node也智慧型指標化。

9樓:友誼樹下

如果 getPath() 會出現找不到需要返回 NULL 的情況, 返回指標就是比較好的選擇了.

如果不想返回指標必須要引用, 可以考慮用 NullObject 模式, 返回乙個全域性 null-object 的引用吧...

C 函式返回常引用給常引用初始化的問題,大家可不可以幫幫我?

黃亮anthony std string get std string t return t 就能滿足這裡的要求。謹慎所有返回引用函式 記憶體塊生命週期 不說人話 字串字面值隱式構造了string物件,get的引數引用了該string物件。但是該物件產生於get函式執行週期內,且由該週期內的棧持有,...

C 返回類時,返回引用還是構造乙個新的例項,什麼時候返回const?

Sunchy321 1 把print的形參改成A const 我不能理解為什麼要改成右值引用,如果有人能向我解釋清楚我非常感謝。A 能接受A const大概說明了什麼。2 我認為,是否返回引用其實取決於返回值是不是乙個新的物件。當然,operator 有其準則,也就是模仿內建運算子的行為 當然,不可...

為什麼c 裡返回引用是危險的,但msdn還是寫了這樣的用法?

小島上的做題家 你的程式UML畫下來應該是一棵樹或者幾棵樹。構建時是從下往上構建,釋放時從上往下釋放。乙個object儲存的reference,其值一定要在這個架構中比這個object靠下,才是安全的,因為它的life time比你這個object長。本質上,你只要定義明白這個ref比它的使用者活得...