const Zeiger vs const Referenzen in C ++

8

Nach dem folgenden Programm kann ich verstehen, dass const Schlüsselwort an einer Vorderseite eines Verweises Const Reference to const value bedeutet, richtig?

%Vor%     
Muhammad Hewedy 05.12.2011, 14:46
quelle

6 Antworten

9

Referenzen sind immer const, Sie brauchen also das Schlüsselwort const nicht Sie; es ist in der Tat verboten.

Sie haben also:

%Vor%

, aber nur:

%Vor%

Der const , der unmittelbar auf den Namen des Typs folgt, kann verschoben werden zu Beginn der Erklärung, auf Kosten einiger Verwirrung zu der Leser.

    
James Kanze 05.12.2011, 14:52
quelle
11

Die Verwirrung ist also:

%Vor%

Nun, in Bezug, ist der 'Zeigerteil' immer const:

%Vor%     
sehe 05.12.2011 14:53
quelle
6

Referenzen können nicht geändert werden, nachdem sie initialisiert wurden. Es macht also keinen Sinn, von einer "const reference" zu sprechen. Die Referenz ist ziemlich ist der Wert, und in Fällen wie diesen ist der Wert konstant und kann auch nicht geändert werden.

    
unwind 05.12.2011 14:48
quelle
5

Ja, const vor einer Referenz bedeutet, dass das Objekt, auf das verwiesen wird, als const behandelt wird (d. h. Sie können nicht auf nicht konstante Methoden oder Datenelemente zugreifen).

Die Referenz selbst ist immer "const" in dem Sinne, dass sie nicht geändert werden kann, um auf ein anderes Objekt zu verweisen, nachdem es initialisiert wurde.

    
Martin B 05.12.2011 14:49
quelle
3

Eine Referenz ist weder const noch nicht const, sie ist nur eine Referenz. Du kannst den Schiedsrichter einer Referenz nicht ändern (das ist der Grund dafür), also macht es keinen Sinn, über Konstanz zu sprechen. In Ihrem Beispiel wird der Verweis nur als const-Verweis bezeichnet, da er sich auf einen const-Typ bezieht.

    
thiton 05.12.2011 14:48
quelle
2
  

const Schlüsselwort vor einer Referenz bedeutet Const Referenz auf const Wert, richtig?

Es bedeutet, dass Sie das Objekt nicht mit der Referenz ändern können.

Das Objekt, auf das sich die Referenz bezieht, könnte noch modifizierbar sein, aber es kann nicht mit die Referenz geändert werden:

  • Wenn das Objekt, auf das es sich bezieht, wirklich modifizierbar ist, dann können Sie die Konstante mit const_cast wegwerfen und dann das Objekt ändern.

  • Wenn das Objekt jedoch nicht änderbar ist, würde der Versuch, es durch Wegwerfen der const-ness zu ändern, ein undefiniertes Verhalten auslösen.

Nawaz 05.12.2011 14:50
quelle

Tags und Links