Übergabe temporärer Objekte als Referenzabweichungen
In C können temporäre Objekte nur an Referenzen übergeben werden, die als const, by value oder as deklariert sind R-Wert-Referenzen. Diese Einschränkung verhindert unbeabsichtigte Änderungen an temporären Dateien, die häufig zu Laufzeitfehlern führen.
Compilerfehler
Beachten Sie den folgenden Code:
class Foo { public: Foo(int x) {}; }; void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); return 0; }
Unter Linux und Mac schlägt die Kompilierung dieses Codes mit dem folgenden Fehler fehl:
error: invalid initialization of non-const reference of type ‘Foo&’ from an rvalue of type ‘Foo’
Dieser Fehler liegt an der Versuchen Sie, ein temporäres Foo-Objekt an einen nicht konstanten Referenzparameter zu übergeben, was C verbietet.
Problemumgehungen
Um dieses Problem zu beheben, können Sie die folgenden Problemumgehungen anwenden:
Foo foo42(42); ProcessFoo(foo42);
Hier wird eine temporäre foo42-Variable erstellt und als Referenz übergeben.
void ProcessFoo(const Foo& foo)
Dadurch können temporäre Objekte aufgrund der Konstante übergeben werden Qualifikationsmerkmal.
void ProcessFoo(Foo foo)
Durch die Wertübergabe wird das Temporäre in die Funktion kopiert und so der Fehler umgangen.
Visual Studio vs. g
Verhalten von Visual Studio unterscheidet sich in diesem Fall von g. MSVC erlaubt die Übergabe temporärer Dateien an nicht konstante Referenzen, was möglicherweise zu subtilen Laufzeitproblemen führt. Dieses Verhalten steht im Gegensatz zu g, das sich strikt an den C-Standard hält und solche Praktiken verbietet.
Das obige ist der detaillierte Inhalt vonWarum kann ich in C kein temporäres Objekt an eine nicht konstante Referenz übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!