簡単な質問があります:
CまたはC++の関数の種類は何ですか
CまたはC++で関数へのポインターを持つことができるので、それは関数が特定の型を持つべきであることを意味します。さもなければ、関数作成へのポインター中の型チェックは意味がありません。
誰かが私を説明できますか、私は正しい道を進んでいるかどうか?
私が正しい道を進んでいる場合、どのようにして関数のタイプを見つけることができますか?
簡単な質問があります:
CまたはC++の関数の種類は何ですか
CまたはC++で関数へのポインターを持つことができるので、それは関数が特定の型を持つべきであることを意味します。さもなければ、関数作成へのポインター中の型チェックは意味がありません。
誰かが私を説明できますか、私は正しい道を進んでいるかどうか?
私が正しい道を進んでいる場合、どのようにして関数のタイプを見つけることができますか?
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
ます。機能は、アクセシビリティの範囲に基づいて分類することもできます。グローバル関数、静的関数などのように。簡単な紹介については、ここを参照してください。
原因として、すべての関数にはタイプがあります。
たとえば、関数
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
。それらはまったく互換性がありません。
ただし、関数の場合、それgoo
がstatic
属するという事実はstruct A
不十分です(メンバー関数が暗黙this
の引数を必要とし、static
関数が必要としない限り)。
それは実際function signature
にはどちらかと一致する必要がありdeclaration
ますfunction pointer
関数シグニチャには、引数タイプ、引数なし、リターンタイプなどのすべてが含まれます。
int
変数と直接同じように、特定の関数が型またはfloat
型char
などであるとは言えません。
signature
私が上で言ったようにそれを常に覚えておいてください。
2つのタイプ(A、B)のすべてのペアには、特定の関数タイプA->Bがあります。A = int、B = floatを選択すると、関数の型は次のようになります。
float my_function(int a);