偶然发现这段代码是在 VS2012 上编译的。
typedef void (*func)();
func f = func(12);
f
用整数 12 作为其地址进行初始化。据我所知,从整数转换为函数指针是有效的,如下所示:
func f = (func)12;
虽然该语句func(12)
看起来更像是一个构造函数,所以我尝试了这个:
func f(12);
它编译失败。
func f = (func)12 //ok, cast 1
func f = func(12); //ok, what? 2
func f(12); //failed 3
func f = 12; //failed 4
所以我的问题是:
- 的真正底层语法
func(12)
是什么,是强制转换还是初始化? - 如何用整数初始化函数指针?
- 第 4 个表达式应该编译吗?第三个呢?