電子書籍の厳選無料作品が豊富!

C++の関数ポインタについて質問です。
下記のように関数ポインタを宣言し、3通りの代入を行ってみました。
(3)のように関数名の頭に&を付けた場合と(2)のように&を付けなかった場合で
全く動きが同じになってしまうのですが、何故なのでしょうか?


------------------------------------------
#include "stdafx.h"
#include <iostream>

using namespace std;

void Func1(){
cout<<"Func1が呼ばれました。"<<endl;
return;
}

int main()
{
//(1)
void (*fp1_1)();
fp1_1 = Func1;
fp1_1();
//(2)
void (*fp1_2)()=Func1;
fp1_2();
//(3)
void (*fp1_3)()=&Func1;
fp1_3();

getchar();
return 0;
}

A 回答 (1件)

一言で言えば Func は &Func に暗黙的に変換されるからです。

より詳しく書くと、関数型は function-to-pointer conversion 規則 (C++規格 [conv.func]) によって、暗黙的に関数ポインタ型に変換されるのです。

この変換規則によって、例えば getchar(); を (*****getchar)(); などと書く事すらできてしまいます。 (*&*&*&*&*&getchar)(); に変換される為です。

(寧ろ、どの様な動作の違いを期待されたのでしょうか。)
    • good
    • 0
この回答へのお礼

akinomyogaさん
どういった動きをするのか検証していたところで
思わぬ動きをしたもので悩んでおりました。
大変有難うございました。

お礼日時:2014/07/12 03:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!