看板 C_and_CPP 關於我們 聯絡資訊
class A: base class class B: derived class class B 有一個data member 是STL 的list, list<A> la; class B 其中一個 member function 是這樣 A * B::getstring(const string& inputstring) const { for ( list<A>::const_iterator i = la.begin(); i !=la.end(); i++ ) { if (xxxx) return const_cast<A *>(&(*i)); } return 0; } 1. 請問這串噁心的cast 該怎麼讓他比較美麗 @@" 比對值之後,目的在output 出list 內正確結果的address 才寫出這麼噁心的東西 2. 而考量到可能找不到 所以把return 定為A * 以便回傳null(0) 的方式讓上層再去作處理 請問這有更好得作法嗎?? -- 喔 謝懇油錫白德到惡靈來 花縮泡的列為孩兒也的退來累蛤蜊名?胡適播的是 ▄▄翠亨不來十大輸入的噴你耳屎飯 偶爾的覽啪味彎曲的我搜給人特例死稱哩? 安得羅技四銳個劣惡的蹦爸死停因爺兒 給夫普褥輸入的奶店傲夫挖屎屎滴碟兒 ((喔 謝的店屎大屎便夠搬挪也為乎 偶而的練我夫的匪類恩德宏我夫的不累夫?)) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.169.209 ※ 編輯: POSIX 來自: 140.117.169.209 (12/20 18:25)
akasan:那幹嘛不 return const A*? 12/20 18:53
POSIX:這部份我不熟, 所以 .... 是該朝這個方向去找解法嗎 @@ 12/20 18:56
purincess:我覺得, 如果你要用const_cast把那個item的constness給 12/20 18:57
purincess:去掉, 你這個function宣告成const本身就有點小毛病 因 12/20 18:58
purincess:為這個function有可能造成object的(bitwise?)constness 12/20 18:59
purincess:改變. 12/20 18:59
purincess:希望我沒弄錯你的意思@@" 12/20 18:59
POSIX:喔喔喔~~ 主要是la這個container 在這function 內我不想改 12/20 19:06
POSIX:動他的內容, 所以配合const func 用const_iterator 來作 12/20 19:06
POSIX:可是從const func 牽動const_iterator, 再影響到return val 12/20 19:07
POSIX:就好像會這麼噁心 似乎是要用return const value 方式才合理 12/20 19:08
johnhmj:你的簽名檔是不是米国国歌《星條旗》? 12/20 19:41
POSIX:=_=" 第一次有人發現 ..... 這麼噁心的歌詞你也看得懂 12/20 19:42
purincess:以前的簽名檔也有中華民國國旗歌不是 XD 12/20 19:45
johnhmj:米国国歌《星條旗》http://0rz.tw/XCLON 先生小姐請起立! 12/20 19:54
tomap41017:推三樓講的那邊,已經是const function語意上就要做到 12/20 20:31
tomap41017:不然其實怪怪的@@" 12/20 20:31
POSIX:如果我把這func宣告程 const A* func() const { } 的方式 12/20 20:38
POSIX:func內的 const_iterator所指到obj 要cast成為 const A* 12/20 20:39
POSIX:這樣的作法對嗎?? 12/20 20:39
POSIX:還是說 我用cast把事情想簡單了!!!(英雄 陳道明口氣) 12/20 20:41
POSIX:換成宣告一個ptr, 把他當作最後回傳用 和iterator做的事情 12/20 20:42
POSIX:分開來 這樣會不會比較好 @@" 12/20 20:42
purincess:如果是const A* 你可以直接return &*i . 現在問題是, 你 12/20 20:48
purincess:這個function的caller會不會更動那個A object? 我一開始 12/20 20:48
purincess:的推文的意思就是, 如果return的A object是會被亂搞的, 12/20 20:48
purincess:你這個function就不能確保(bitwise) constness, 就不適 12/20 20:49
purincess:合宣告為const function. 當然, 如果你想要/需要那個 12/20 20:49
purincess:被return的A object不會被亂搞, 宣告成const pointer是 12/20 20:49
purincess:個不錯的作法. 12/20 20:49
POSIX:soga, 這樣我大概懂了!!! 感謝各位推文大大 12/20 21:00
legnaleurc:我的作法可能是在找不到的時候 throw 一個 exception 12/20 21:19
loveme00835:excpetion +1 找不到最好還是用例外, 硬要回傳值光想 12/20 21:25
loveme00835:出不合法的標兵值就夠你想的, 之前看到一份stack<T> 12/20 21:27
loveme00835:pop() 回傳 (T)NULL; 當 T=string, 你知道的...作者 12/20 21:29
loveme00835:還用噁心的特化來解決這問題 12/20 21:29
POSIX:throw 的方式不錯!!! 12/20 21:39
POSIX:我不敢想像那噁心的T的偏特化 ~"~ 12/20 21:44
POSIX:其實我上面例子所犯的似乎是effective c++ 提到的 12/20 21:47
POSIX:avoid returning "handles" to internal data. 12/20 21:47