3

簡単な質問があります:

CまたはC++の関数の種類は何ですか

CまたはC++で関数へのポインターを持つことができるので、それは関数が特定の型を持つべきであることを意味します。さもなければ、関数作成へのポインター中の型チェックは意味がありません。

誰かが私を説明できますか、私は正しい道を進んでいるかどうか?

私が正しい道を進んでいる場合、どのようにして関数のタイプを見つけることができますか?

4

4 に答える 4

6

関数ポインタの構文

C / C ++の関数の型には、return typeとの両方が含まれtypes of input parametersます。

次の関数宣言について考えてみます。

int function(char, float);

その関数へのポインタのタイプは次のとおりです。

int (*funptr)(char, float); 

同様に一般的に:

returntype function (argtype1, argtype2, argtype3)

そのような関数への対応するポインタは

returntype (*ptr) (atgtype1, atgtype2, atgtype3);  

関数にはさまざまな種類があります。ここで関数ポインタに関する有用なリファレンスを見つけてください。

また、この分類はに基づいていreturn type and argument typesます。機能は、アクセシビリティの範囲に基づいて分類することもできます。グローバル関数、静的関数などのように。簡単な紹介については、ここを参照してください。

于 2012-10-25T11:17:44.177 に答える
5

原因として、すべての関数にはタイプがあります。

たとえば、関数

double foo(bar& f, const const baz*)

タイプがあります

function, that accepts reference to bar and constant pointer to baz and return double

それは次のように書くことができます

double ()(bar&, const baz*)

その関数の型の変数へのポインターはtype(その関数へのポインターを格納できる変数)を持ちます

タイプがあります

double (*)(bar&, const baz*)

または、そのタイプの関数へのtypedefポインターが必要な場合は、次のように記述できます。

typedef double (*func_ptr)(bar&, const baz*)

また、

func_ptr is a type of pointer to function, that accepts reference to bar and constant pointer to baz and return double

ここでの1つのことは、関数が関数へのポインターに減衰するため、次のように記述できることです。

func_ptr f = &foo;

func_ptr g = foo;

そしてそれは同じだろう。


今、あなたが持っていると想像してください

struct A
{
    double goo(bar& f, const const baz*);
};

gooのタイプがあります

function of struct A, that accepts reference to bar and constant pointer to baz and return double

この関数へのポインタは次のようになります

double (A::*)(bar&, const baz*)

タイプはfree関数のタイプとは異なることに注意してくださいfoo。それらはまったく互換性がありません。

ただし、関数の場合、それgoostatic属するという事実はstruct A不十分です(メンバー関数が暗黙thisの引数を必要とし、static関数が必要としない限り)。

于 2012-10-25T11:15:36.037 に答える
2

それは実際function signatureにはどちらかと一致する必要がありdeclarationますfunction pointer

関数シグニチャには、引数タイプ、引数なし、リターンタイプなどのすべてが含まれます。

int変数と直接同じように、特定の関数が型またはfloatcharなどであるとは言えません。

signature私が上で言ったようにそれを常に覚えておいてください。

于 2012-10-25T11:10:32.613 に答える
-2

2つのタイプ(A、B)のすべてのペアには、特定の関数タイプA->Bがあります。A = int、B = floatを選択すると、関数の型は次のようになります。

float my_function(int a);
于 2012-10-25T11:12:29.227 に答える