[问题] 请问如何看这一行的执行顺序?

楼主: 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的括号是不同的东西^ 和普通的括号 漏掉优先权和结合性都不一样 你把很多东西混在一起了

Links booklink

Contact Us: admin [ a t ] ucptt.com