Vor einiger Zeit habe ich festgestellt, dass es möglich ist, eine C ++ - Funktion zu schreiben, die einen Parameter vom Funktionstyp ( nicht Funktionszeigertyp!) akzeptiert. Zum Beispiel ist hier eine Funktion, die eine Callback-Funktion übernimmt, die ein Double akzeptiert und zurückgibt:
%Vor%Meine Frage ist, was es bedeutet, eine Variable vom Funktionstyp zu haben, da man sie in keinem anderen Kontext deklarieren kann. Wie unterscheidet es sich semantisch von einem Funktionszeiger oder einer Referenz auf eine Funktion? Gibt es einen wichtigen Unterschied zwischen Funktionszeigern und Variablen des Funktionstyps, auf die ich achten sollte?
Genau wie void f(int x[])
ist das gleiche wie void f(int* x)
, die folgenden beiden sind identisch:
Oder in der Amtssprache (C ++ 03 8.3.5 / 3), wenn der Typ einer Funktion bestimmt wird,
Nachdem der Typ jedes Parameters bestimmt wurde, wird jeder Parameter vom Typ "Array von
T
" oder "Funktion, dieT
zurückgibt" als "Zeiger aufT
" oder "Zeiger auf Funktion wird zurückgenommenT
, "jeweils.