偶然にも、このコードが 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 番目の式はコンパイルする必要がありますか? 3枚目はどうですか?