Beim Versuch, ein temporäres Objekt als nicht konstante Referenz zu übergeben, wie im folgenden Code:
void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); // Error: Can't pass temporary object as reference }
Compiler wie g und clang lösen einen Fehler aus. Dies liegt daran, dass C die Übergabe temporärer Dateien per Design auf konstante Referenzen, Wertparameter oder rWert-Referenzen beschränkt.
Der Grund für diese Einschränkung ist, dass Funktionen, die nicht konstante Referenzparameter empfangen, beabsichtigen, diese Parameter zu ändern und zurückzugeben an den Anrufer. Das Übergeben eines temporären Fehlers wird in diesem Szenario als unsinnig angesehen und weist wahrscheinlich auf einen Fehler hin.
Um dieses Problem zu beheben, stehen mehrere Problemumgehungen zur Verfügung:
1. Eine temporäre Variable verwenden
Erstellen Sie eine temporäre Variable und übergeben Sie sie als Argument an die Funktion:
Foo foo42(42); ProcessFoo(foo42);
2. Deklarieren der Funktion mit einem const-Referenzparameter
Ändern Sie die Funktionsdeklaration, um eine const-Referenz zu akzeptieren:
void ProcessFoo(const Foo& foo) { }
3. Übergabe nach Wert
Ermöglichen Sie der Funktion, das Objekt nach Wert zu akzeptieren:
void ProcessFoo(Foo foo) { }
Visual Studio ermöglicht diesen Originalcode aufgrund einer weniger restriktiven Compiler-Implementierung.
Das obige ist der detaillierte Inhalt vonWarum kann ich in C ein temporäres Objekt nicht als nicht konstante Referenz übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!