const verweist auf ein nicht-konstantes Objekt

8

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%     
user795451 13.09.2011, 18:55
quelle

3 Antworten

13

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.

    
Oliver Charlesworth 13.09.2011, 18:56
quelle
5

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.

    
AnT 13.09.2011 19:00
quelle
1

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%     
ravs2627 24.06.2014 10:51
quelle

Tags und Links