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比它的使用者活得...