看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《frankhsu421 (問號)》之銘言: 方法1: switch switch( a*b ) { case 1: case 5: // your codes here default: } 優點: 加新的數值比較快, 寫起來清楚 缺點: case label 只能放常數, 要寫 default 區分其他情形 方法2: mask 法 if( ((a*b | 4) ^ ~5) == -1 ) // your codes here 優點: 無 缺點: 受限於二補數系統, 加新數值要再推導新算法 方法3: Boost.Lambda if( (_1 == 1 || _1 == 5)(a*b) ) // your codes here 優點: 可以將邏輯重複使用 auto one_or_five = _1 == 1 || _1 == 5; if( one_or_five(a*b) ) // ... auto one_or_five_or_nine = one_or_five || _1 == 9; if( one_or_five_or_nine(a*c) ) // ... 缺點: 編譯時間較長, 正常人看不懂 -- ╔═══╗╔═══╗ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗ 金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS ≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║ 高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧 趙賢榮金智淑盧 乙吳勝雅ψmocki -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.221.215 ※ 編輯: loveme00835 來自: 140.121.221.215 (05/18 03:43)
VictorTom:推:) 05/18 14:15
frankhsu421:感謝,Lambda似乎就是我在尋找的答案 05/18 14:19
frankhsu421:不過看大家討論,應該還是會選擇多宣告變數搭配switch 05/18 14:20
frankhsu421:另外Lambda C++11似乎有支援了? 05/18 14:20
suhorng:([](int _1){ return _1==1 | _1==5; })(a*b)你說這個? 05/18 15:41
loveme00835:我的話不會另外多宣告變數, 除非這個變數真的有什麼用 05/18 17:01
loveme00835:途必須透過"名稱"來強調, 每次我想名字就會想很久... 05/18 17:01
loveme00835:lambda expr 會讓 code 變冗長, 能不用就不用囉 05/18 17:03
TeaEEE:Lambda雖然a*b只做一次,但是效能真的有比較好嗎? 05/18 17:50
hilorrk:基本上這三種效能都一樣吧...? 05/18 17:52
suhorng:現在問題不是在a,b可能是任意函式呼叫嗎? 05/18 20:09
dendrobium:正常人看不懂XDDDD 05/18 21:02
descent:我是正常人 05/18 22:35
amozartea:我也是正常人.... 05/18 23:58
amozartea:那還是宣告c比較好吧... 05/18 23:59
MOONRAKER:整人專家可以… 05/19 06:51