Angenommen, ich habe eine Funktion, die eine Nebenwirkung führt und dann eine Antwort zurück:Funktionszeiger und Rückgabetypkonvertierungen
int foo()
{
perform_some_side_effect();
return 42;
}
Ich möchte foo
an einen Funktionszeiger binden, aber ich bin nicht daran interessiert, in der Antwort, nur die Nebenwirkung:
void (*bar)() = foo;
dies scheint jedoch eine Art Fehler zu sein:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
Was ist der Grund für diesen Fehler? Warum erlaubt mir das Typsystem nicht, die Antwort zu ignorieren?
Auf einer Seite zur Kenntnis, es funktioniert, wenn ich die Funktionszeiger in einem std::function
wickeln:
std::function<void()> baz = foo;
Wie std::function
(scheinbar) verwaltet diese Einschränkung in der Art System zu umgehen?
Der rational ist nur, dass sie verschiedene Arten sind zu arbeiten. Sie können dies (auf eigene Gefahr) mit 'reininterpret_cast' überschreiben. –
@StevenBurnap: Die Frage ist * warum * sie nicht konvertieren können. Es ist offensichtlich, dass sie unterschiedliche Typen sind. Ein 'float' ist auch kein' int', aber Sie können sie konvertieren. – Puppy
Ich würde vermuten, dass es als allgemeine Regel gilt implizit Casting Pointer ist nicht erlaubt. –