Würde im Folgenden ein temporäres Objekt erstellt werden, bevor const Referenz auf ein nicht-konstantes Objekt verwendet wird?
%Vor%Wenn nein, wie funktioniert das?
%Vor%Nein.
Eine Referenz ist einfach ein Alias für ein vorhandenes Objekt. const
wird vom Compiler erzwungen; Es wird lediglich überprüft, dass Sie nicht versuchen, das Objekt über den Verweis r
zu ändern. * Dies erfordert keine Erstellung einer Kopie.
Da const
lediglich eine Anweisung an den Compiler ist, "read-only" zu erzwingen, sollte es sofort offensichtlich sein, warum das letzte Beispiel nicht kompiliert wird. const
wäre sinnlos, wenn Sie es einfach umgehen könnten, indem Sie ein const
ref auf ein const
Objekt anwenden.
* Natürlich steht es Ihnen weiterhin frei, das Objekt über x
zu ändern. Alle Änderungen sind auch über r
sichtbar, da sie sich auf dasselbe Objekt beziehen.
In
%Vor% Die rechte Seite ist ein lvalue und der Typ von x
ist derselbe wie der Typ der Referenz (ignoriert cv-qualifications). Unter diesen Umständen wird die Referenz direkt an x
angehängt, es wird keine temporäre erstellt.
Was "wie funktioniert das?" ... Ich verstehe nicht, was Ihre Frage ausgelöst hat. Es funktioniert nur auf die einfachste Art und Weise: Die Referenz ist direkt an x
angehängt. Nichts mehr dazu.
Das geht nicht
%Vor%weil es sofort die Regeln der const-Korrektheit verletzt.
Das Verständnis der Referenz (& amp; amp;) beantwortet diese Frage ..
Der Verweis ist nur ein Alias für die Variable, der er zugewiesen ist.
Und const ist eine Einschränkung, die der Compiler der Variablen auferlegt, die als const
deklariert ist %Vor%In diesem Fall ist es eine konstante Referenz auf eine nicht konstante Variable. Sie können also die Daten von x nicht mit der Referenzvariablen r ändern (wirkt nur als read only) .. Sie können die Daten x dennoch ändern, indem Sie x
ändern %Vor%In diesem Fall ist eine nicht konstante Referenz auf const member, die bedeutungslos ist. Sie sagen, dass Referenz Ihnen erlauben kann, ein const Mitglied zu bearbeiten (was nie möglich ist).
Wenn Sie also eine Referenz für ein konstantes Element erstellen möchten, muss es wie im ersten Fall sein, den Sie erwähnt haben
%Vor%