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

Warum kann ich in C kein temporäres Objekt an eine nicht konstante Referenz übergeben?

DDD
Freigeben: 2024-12-10 22:29:10
Original
258 Leute haben es durchsucht

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

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

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

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:

  1. Erstellen Sie ein Temporäres Variable:
Foo foo42(42);
ProcessFoo(foo42);
Nach dem Login kopieren

Hier wird eine temporäre foo42-Variable erstellt und als Referenz übergeben.

  1. Übergabe per Const-Referenz:
void ProcessFoo(const Foo& foo)
Nach dem Login kopieren

Dadurch können temporäre Objekte aufgrund der Konstante übergeben werden Qualifikationsmerkmal.

  1. Wertübergabe:
void ProcessFoo(Foo foo)
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage