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