Heim > Backend-Entwicklung > C++ > Warum kann ich in C ein temporäres Objekt nicht als nicht konstante Referenz übergeben?

Warum kann ich in C ein temporäres Objekt nicht als nicht konstante Referenz übergeben?

Barbara Streisand
Freigeben: 2024-12-15 02:19:10
Original
284 Leute haben es durchsucht

Why Can't I Pass a Temporary Object as a Non-Const Reference in C  ?

Übergeben eines temporären Objekts als Referenz

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
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

2. Deklarieren der Funktion mit einem const-Referenzparameter

Ändern Sie die Funktionsdeklaration, um eine const-Referenz zu akzeptieren:

void ProcessFoo(const Foo& foo)
{
}
Nach dem Login kopieren

3. Übergabe nach Wert

Ermöglichen Sie der Funktion, das Objekt nach Wert zu akzeptieren:

void ProcessFoo(Foo foo)
{
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage