Heim > Backend-Entwicklung > C++ > Warum führt die Übergabe eines temporären Objekts als nicht konstante Referenz in C zu Kompilierungsfehlern?

Warum führt die Übergabe eines temporären Objekts als nicht konstante Referenz in C zu Kompilierungsfehlern?

DDD
Freigeben: 2024-12-12 20:07:09
Original
554 Leute haben es durchsucht

Why Does Passing a Temporary Object as a Non-Const Reference in C   Cause Compilation Errors?

Fehler: Temporäres Objekt als Referenz übergeben

In C kann der Versuch, ein temporäres Objekt als nicht konstante Referenz zu übergeben, zu Kompilierungsfehlern führen . Dies geschieht, wenn eine Funktion einen Referenzparameter erwartet und mit einem temporären Objekt aufgerufen wird.

Betrachten Sie beispielsweise den folgenden Code:

class Foo {
public:
    Foo(int x) {};
};

void ProcessFoo(Foo& foo) {
}

int main() {
    ProcessFoo(Foo(42));
    return 0;
}
Nach dem Login kopieren

Dieser Code lässt sich auf einigen Compilern erfolgreich kompilieren, z Visual Studio, scheitert jedoch mit Fehlern bei anderen, z. B. GCC. Die Fehlermeldung weist normalerweise auf eine ungültige Initialisierung des nicht konstanten Referenzparameters von einem R-Wert-Typ hin.

Problemumgehungen

Um dieses Problem zu beheben, gibt es drei häufige Problemumgehungen:

  1. Erstellen Sie eine temporäre Variable für den Aufruf von ProcessFoo:

    Foo foo42(42);
    ProcessFoo(foo42);
    Nach dem Login kopieren
  2. Lassen Sie ProcessFoo eine konstante Referenz annehmen:

    void ProcessFoo(const Foo& foo) {
    }
    Nach dem Login kopieren
  3. Erlauben Sie ProcessFoo, Foo nach Wert zu empfangen:

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

Gründe für die Zusammenstellung Fehler

C verbietet die Übergabe eines temporären Objekts an eine nicht konstante Referenz, um bedeutungslose Vorgänge zu verhindern. Eine Funktion, die eine nicht konstante Referenz annimmt, erwartet, den Parameter zu ändern und an den Aufrufer zurückzugeben. Die Übergabe eines temporären Objekts macht diesen Zweck zunichte, da es nicht geändert und zurückgegeben werden kann.

Kompatibilitätsunterschiede

Der Grund, warum der Originalcode in Visual Studio, aber nicht in GCC kompiliert wird, ist wahrscheinlich aufgrund von Unterschieden in den Compilerkonfigurationen. Visual Studio ermöglicht möglicherweise die Übergabe temporärer Dateien an nicht konstante Referenzen zur Optimierung oder aus Gründen der Abwärtskompatibilität. Moderne C-Compiler ziehen es jedoch vor, die Sprachsemantik strikt durchzusetzen, wie sie in GCC implementiert ist.

Das obige ist der detaillierte Inhalt vonWarum führt die Übergabe eines temporären Objekts als nicht konstante Referenz in C zu Kompilierungsfehlern?. 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