4

偶然にも、このコードが 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

だから私の質問は:

  1. の実際の基礎となる構文は何func(12)ですか?それはキャストですか、それとも初期化ですか?
  2. 関数ポインタを整数で初期化するにはどうすればよいですか?
  3. 4 番目の式はコンパイルする必要がありますか? 3枚目はどうですか?
4

1 に答える 1