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

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

Linda Hamilton
Freigeben: 2024-11-29 21:01:13
Original
665 Leute haben es durchsucht

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

Temporäre Objekte als Referenzen übergeben

In C kann die Verwendung eines temporären Objekts als Referenz zu unerwartetem Verhalten führen. Um dies zu vermeiden, erzwingt der Compiler Einschränkungen bei der Übergabe temporärer Objekte an Referenzparameter.

Beim Kompilieren des in der ersten Abfrage bereitgestellten Codes:

class Foo { public: Foo(int x) {}; };
void ProcessFoo(Foo& foo) {};
int main() { ProcessFoo(Foo(42)); return 0; }
Nach dem Login kopieren

Der Fehler tritt auf, weil das temporäre Foo(42 )-Objekt wird an einen nicht konstanten Referenzparameter (ProcessFoo(Foo& foo)) übergeben. C erlaubt diese Vorgehensweise per Design nicht.

Problemumgehungen:

Die vorgeschlagenen Problemumgehungen lindern das Problem durch:

  • Erstellen einer temporären Variablen: Zuweisen des temporären Objekts zu einer Variablen und anschließendes Übergeben als Referenz:

    Foo foo42(42);
    ProcessFoo(foo42);
    Nach dem Login kopieren
  • Verwenden einer Const-Referenz: Ändern von ProcessFoo, um eine Const-Referenz (ProcessFoo(const Foo& foo)) zu verwenden, die es ermöglicht, temporäre Referenzen zu akzeptieren Objekte:

    void ProcessFoo(const Foo& foo) {};
    ProcessFoo(Foo(42));
    Nach dem Login kopieren
  • Vorbeigehen Wert: Erlaubt ProcessFoo, das Objekt nach Wert zu empfangen (ProcessFoo(Foo foo)), wodurch die Referenzbeschränkung vermieden wird:

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

Compiler-Diskrepanz:

Der Verhaltensunterschied zwischen Microsoft Visual Studio und GNU C (g) ist wahrscheinlich auf unterschiedliche Standardeinstellungen zurückzuführen. Standardmäßig erzwingt g eine strengere Einhaltung des C-Standards, während Visual Studio bestimmte Abweichungen zulassen kann. Dies kann dazu führen, dass in einem Compiler Fehler generiert werden, im anderen jedoch nicht.

Das obige ist der detaillierte Inhalt vonWarum kann ich ein temporäres C-Objekt nicht 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage