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
Barbara StreisandOriginal
2024-12-15 02:19:10286Durchsuche

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
}

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!

Stellungnahme:
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
Vorheriger Artikel:Ist `coutNächster Artikel:Ist `cout