Funktionszeiger vs Funktoren in C ++

9

Was ist der Unterschied zwischen Funktoren und Funktionszeigern? Zum Beispiel

%Vor%

Beide Ansätze funktionieren, aber ich bin mir sicher, dass es Fälle geben wird, in denen man gegenüber anderen bevorzugt ist (oder möglich ist).

    
Gaurav Sehgal 04.06.2016, 21:43
quelle

2 Antworten

11

Zum einen kann der Funktor einen internen Zustand enthalten; ein Zustand, der nur für diesen Aufruf des Funktionsobjekts gültig ist. Sie könnten static Variablen zu Ihrer Funktion hinzufügen, aber diese würden für alle Aufrufe der Funktion verwendet werden.

Zweitens kann der Compiler Inline-Aufrufe an den Funktor übergeben; Es kann nicht dasselbe für einen Funktionszeiger sein. Das ist der Grund, warum C ++ std::sort() die Leistung von C qsort() leistungsmäßig schlägt.

    
DevSolar 04.06.2016, 21:55
quelle
0

functors können sogar benutzt werden, um Lambda-Ausdrücke zu emulieren (wenn Sie einen älteren Compiler vor C ++ 11 / C ++ 14 verwenden müssen), weil sie einen individuellen Status haben können (zB als Member-Variablen).

%Vor%

oder als Lambda

%Vor%

Funktionszeiger können nur Argumente erhalten, sind aber zustandslos, sofern sie nicht auf globale Variablen zugreifen (was wirklich schlecht und gefährlich ist).

%Vor%     
cwschmidt 04.06.2016 22:00
quelle

Tags und Links