Heim > Backend-Entwicklung > C++ > Warum kann ich keine nicht konstante Referenz verwenden, um ein temporäres Objekt in C zu binden?

Warum kann ich keine nicht konstante Referenz verwenden, um ein temporäres Objekt in C zu binden?

Mary-Kate Olsen
Freigeben: 2024-12-25 03:26:27
Original
751 Leute haben es durchsucht

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

Warum nicht nicht-konstante Referenzen auf temporäre Objekte?

In C können temporäre Objekte, die während eines Ausdrucks erstellt wurden, nur konstanten Referenzen zugewiesen werden, nicht jedoch nicht-konstante Referenzen. Dies hat Fragen zum Grund dieser Einschränkung aufgeworfen.

Die herkömmliche Erklärung basiert auf den potenziellen Gefahren der Änderung temporärer Objekte. Wenn ein nicht konstanter Verweis auf ein temporäres Objekt zulässig wäre, könnte es unbeabsichtigt geändert werden, was zu unvorhersehbaren Konsequenzen führen würde. Kritiker argumentieren jedoch, dass das Lesen von temporären Objekten ebenso riskant sei und ebenfalls eingeschränkt werden sollte.

Um diese Unterscheidung zu verstehen, betrachten Sie das folgende Beispiel:

String& a = String("test");         // Error
const String& a = String("test");   // Ok
Nach dem Login kopieren

Die erste Zeile ist ein Fehler, während die zweite Zeile gültig ist. Dies legt nahe, dass es bei C nicht um das Lesen von temporären Objekten geht. Warum ist also das Schreiben verboten?

Die Antwort liegt in einem grundlegenden Aspekt von C: Funktionsparameter. Wenn nicht konstante Verweise auf Temporäre zulässig wären, würde dies zu Mehrdeutigkeiten bei der Übergabe temporärer Objekte an Funktionen führen, die Verweise akzeptieren. Zum Beispiel:

void inc(double& x)
{
    x += 0.1;
}

int i = 0;
inc(i);
Nach dem Login kopieren

In diesem Beispiel ist bei der Übergabe von i an inc() unklar, ob ein Verweis auf i beabsichtigt ist oder ob eine temporäre Kopie von i erstellt werden soll. Diese Mehrdeutigkeit kann zu subtilen Fehlern führen.

Durch das Verbot nicht konstanter Verweise auf Temporäre stellt C sicher, dass Funktionsparameter immer auf L-Werte (nicht temporäre Objekte) verweisen. Dies eliminiert das Potenzial für Verwirrung und fördert die Klarheit des Codes.

Das obige ist der detaillierte Inhalt vonWarum kann ich keine nicht konstante Referenz verwenden, um ein temporäres Objekt in C zu binden?. 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