[問題] 一個C的問題

看板C_and_CPP作者 (用電話遙控小星星)時間13年前 (2012/03/31 00:49), 編輯推噓5(5021)
留言26則, 10人參與, 最新討論串1/1
不好意思 不知道怎麼下關鍵字找答案 所以直接po文問一下有經驗的人 謝謝幫忙 :) 題目: if (en) a = b; else a = c; 與 a = en ? b : c; 有什麼不一樣? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.126.154

03/31 00:51, , 1F
<=這什麼?
03/31 00:51, 1F
抱歉 已訂正 ※ 編輯: sugarphone 來自: 219.84.126.154 (03/31 00:53)

03/31 00:59, , 2F
這兩種不是都一樣嗎?可以查看看?:寫法
03/31 00:59, 2F

03/31 01:03, , 3F
至少會有compile後 assembly差異造成的效率不一樣吧
03/31 01:03, 3F

03/31 01:04, , 4F
只是詳細的差異 想請懂的人解釋一下 謝謝
03/31 01:04, 4F

03/31 01:08, , 5F
這就要請高人講解了...
03/31 01:08, 5F

03/31 01:12, , 6F
何不就真的直接disasm出來看一下:)
03/31 01:12, 6F

03/31 01:19, , 7F
早期古老的說法是,在簡單的式子裡,後面的寫法被優化機
03/31 01:19, 7F

03/31 01:19, , 8F
會較高.
03/31 01:19, 8F

03/31 01:55, , 9F
差別極小 就當作一種簡潔的寫法吧
03/31 01:55, 9F

03/31 02:03, , 10F
感覺第二種比較不好看
03/31 02:03, 10F

03/31 02:28, , 11F
請直接寫第一種謝謝
03/31 02:28, 11F

03/31 02:28, , 12F
第二種寫法有個應用場合是拿來呼叫不同的ctor
03/31 02:28, 12F

03/31 02:30, , 13F
比如說,假設 Obj 這個 class 沒有 default ctor
03/31 02:30, 13F

03/31 02:31, , 14F
可以寫 Obj o = (condition)? Obj(123) : Obj("str");
03/31 02:31, 14F

03/31 02:31, , 15F
來呼叫不同的建構式對 o 初始化
03/31 02:31, 15F

03/31 02:31, , 16F
這個就沒辦法改用第一種方法來寫
03/31 02:31, 16F

03/31 03:00, , 17F
回樓上, 還是有的. 換成 reference 初始化才是非用(2)
03/31 03:00, 17F

03/31 03:00, , 18F
不可
03/31 03:00, 18F

03/31 03:02, , 19F
l大的寫法是for copy ctor, 但是要針對呼叫不同版ctor
03/31 03:02, 19F

03/31 03:02, , 20F
也可用 if 寫
03/31 03:02, 20F

03/31 03:23, , 21F
我的意思是沒有default ctor,宣告的同時就要初始化
03/31 03:23, 21F

03/31 03:24, , 22F
reference 也是宣告時就要初始化的例子
03/31 03:24, 22F

03/31 12:53, , 23F
就用new原地建構囉
03/31 12:53, 23F

03/31 14:50, , 24F
這樣不是會初始化兩次??
03/31 14:50, 24F

03/31 23:05, , 25F
對小弟這種新手來說…兩種其實一樣= =
03/31 23:05, 25F

03/31 23:21, , 26F
C 沒有 ctor 問題吧 ...
03/31 23:21, 26F
文章代碼(AID): #1FTUGS9Q (C_and_CPP)