PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 請問如何看這一行的執行順序?
作者:
zzss2003
(brotherD)
2018-05-21 16:39:15
圖: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
問題: 為什麼一定要加第四個括號?
謝謝~
作者:
wei115
(ㄎㄎ)
2018-05-21 17:02:00
function call優先權最高,如果括起來,那會先執行e.fn,然後才把回傳轉型成function更正:如果「沒有」刮起來
作者:
james732
(好人超)
2018-05-21 19:13:00
轉型應該不算是執行?fn的type不要寫成void *就不用這麼麻煩了
https://ideone.com/THZHeM
這樣不是很好嗎
作者:
cutekid
(可愛小孩子)
2018-05-21 19:40:00
推 1 樓唷,長知識了。
作者: AstralBrain
2018-05-22 03:48:00
function call和type cast的括號是不同的東西^ 和普通的括號 漏掉優先權和結合性都不一樣 你把很多東西混在一起了
繼續閱讀
[問題] 這個 template 後面三行需要詳解...
tomjpsun
[問題] 如何使用c++讀取.QCIF和.CIF檔
mosaic16384
[問題] for迴圈裏面 ++i的問題?
yongb
[問題] 兩結構近似的struct互相轉型
kkroy
[問題] semaphore使用的問題
Zoxge
[問題] 從參數傳 separator 進 C 程式
Neisseria
[問題] open cv影片問題
hope2801
[問題] open source使用方式
jy0318m
[問題] unsigned int bitwise operator
shiningboy
[問題]C++ network programming 和 multi-thread 書籍推薦
nicknick0630
Links
booklink
Contact Us: admin [ a t ] ucptt.com