Ich bin es gewohnt, diese Definition mit einem Sternchen zu sehen, dh:
double fin_diff(double (*f)(double), double x, double h = 0.01);
Wissen Sie, warum die erste Definition auch gültig ist?
Funktionen und Funktionszeiger haben dieselbe Bedeutung, wenn sie als Parameter einer Funktion verwendet werden.
– Hacken
22. Juli 2019 um 10:09 Uhr
Während Sie über Funktionszeiger und dergleichen Bescheid wissen müssen, sollten Sie sie in C++ wirklich nicht selbst verwenden, wenn Sie es vermeiden können. Wenn Sie beabsichtigen, die Funktion wie im gezeigten Beispiel direkt aufzurufen, verwenden Sie stattdessen Vorlagen. Ansonsten verwenden std::function. Verwenden von Vorlagen bzw std::function erhöht die Flexibilität, indem Sie jede Art von aufrufbarem Objekt mit der richtigen Signatur übergeben können, wie z. B. ein Lambda, ein Funktorobjekt, ein tatsächlicher Funktionszeiger usw.
– Irgendein Programmierer-Typ
22. Juli 2019 um 10:10 Uhr
Die Sprachen c und c++ sind zwei verschiedene Sprachen. Bitte wählen Sie eine aus und entfernen Sie die andere tag da die Antwort je nach Sprache unterschiedlich ist
– Benutzer3629249
22. Juli 2019 um 19:14 Uhr
Benutzer7860670
Standard sagt, dass diese beiden Funktionen äquivalent sind, da Funktionsargumente so angepasst werden, dass sie ein Zeiger auf Funktionsargumente sind:
16.1 Überladbare Deklarationen [over.load]
(3.3) Parameterdeklarationen, die sich nur darin unterscheiden, dass die eine ein Funktionstyp und die andere ein Zeiger auf denselben Funktionstyp ist, sind äquivalent. Das heißt, der Funktionstyp wird angepasst, um ein Zeiger auf den Funktionstyp (11.3.5) zu werden.
Ähnlich ist es, wenn Sie eine Funktion über einen Zeiger auf eine Funktion aufrufen
fptr();
(*fptr)();
(**fptr)();
(***fptr)();
Ad infinitum.
Alles bricht zusammen.
Was ist die Motivation dafür? Es ist nicht so, dass diese unendliche Verkettung ansonsten unmöglich wäre (stellen Sie sich einen Zeiger vor, dessen referenzierter Wert seine eigene Adresse enthält), aber ich verstehe nicht, warum sich alle Funktionen so verhalten sollten.
– Alexander
23. Juli 2019 um 3:25 Uhr
@Alexander – es ist im Nebel der Zeit verloren gegangen.
– Peter Becker
23. Juli 2019 um 12:39 Uhr
@Alexander – ernsthaft, das kommt von C und war, soweit ich weiß, schon immer der Fall. Ich kenne den Grund dafür nicht.
Funktionen und Funktionszeiger haben dieselbe Bedeutung, wenn sie als Parameter einer Funktion verwendet werden.
– Hacken
22. Juli 2019 um 10:09 Uhr
Während Sie über Funktionszeiger und dergleichen Bescheid wissen müssen, sollten Sie sie in C++ wirklich nicht selbst verwenden, wenn Sie es vermeiden können. Wenn Sie beabsichtigen, die Funktion wie im gezeigten Beispiel direkt aufzurufen, verwenden Sie stattdessen Vorlagen. Ansonsten verwenden
std::function
. Verwenden von Vorlagen bzwstd::function
erhöht die Flexibilität, indem Sie jede Art von aufrufbarem Objekt mit der richtigen Signatur übergeben können, wie z. B. ein Lambda, ein Funktorobjekt, ein tatsächlicher Funktionszeiger usw.– Irgendein Programmierer-Typ
22. Juli 2019 um 10:10 Uhr
Die Sprachen
c
undc++
sind zwei verschiedene Sprachen. Bitte wählen Sie eine aus und entfernen Sie die anderetag
da die Antwort je nach Sprache unterschiedlich ist– Benutzer3629249
22. Juli 2019 um 19:14 Uhr