看板 C_and_CPP 關於我們 聯絡資訊
圖:https://ideone.com/e.js/37Gfzz 此圖是用typecast把指向void的pointer轉型成指向一個function的pointer 在第16行: ( ( void(*)(void) )e.fn )(); 我一直搞不太懂這裡operator的優先順序 ()優先權最高,結合性是由左至右。如果是nested,最裡面的先執行 1.執行(*)的括號 2.執行(void)的括號 3.執行( void(*)(void) )的括號 4.執行( (void(*)(void) )e.fn )的括號 5.執行最右邊的()括號 情況: 少了第四行的括號,compile出現error。 解析: 也就是說加了第四行的括號,compiler才認為這整個東西是一個指向void(*)(void) 的pointer 問題: 為什麼一定要加第四個括號? 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1526891960.A.C15.html
wei115: function call優先權最高,如果括起來,那會先執行e.fn, 05/21 17:02
wei115: 然後才把回傳轉型成function 05/21 17:02
wei115: 更正:如果「沒有」刮起來 05/21 17:03
james732: 轉型應該不算是執行? 05/21 19:13
james732: fn的type不要寫成void *就不用這麼麻煩了 05/21 19:13
james732: https://ideone.com/THZHeM 這樣不是很好嗎 05/21 19:17
cutekid: 推 1 樓唷,長知識了。 05/21 19:40
AstralBrain: function call和type cast的括號是不同的東西 05/22 03:48
AstralBrain: ^ 和普通的括號 漏掉 05/22 03:50
AstralBrain: 優先權和結合性都不一樣 你把很多東西混在一起了 05/22 03:52
謝謝一樓 長知識惹 ※ 編輯: zzss2003 (60.248.26.157), 05/22/2018 09:36:12