2016-05-04 17 views
2
  1. Wie behandeln die meisten Compiler eigentlich const? Was heißt das technisch? (Nicht praktisch)

Wenn ich sage alles Ich meine, nehme ich habe eine benutzerdefinierte Klasse mit einem Behälter als Mitglied Feld, und dann eine Funktion, die durch Referenzwerte geht und fügt sie in das Member-Feld.Führt eine konstante Instanziierung einer benutzerdefinierten Klasse auch * alles * in der Klasse zu einer Konstanten?

  1. Wenn ich eine konstante Instanz dieser Klasse habe, wird die Konstante gefiltert?

  2. Wenn ich einen const STL-Iterator eines non const Containers (meiner sharedPointers zu Instanziierungen meiner benutzerdefinierten Klasse) habe, was genau ist const darüber? Kann ich den Inhalt des Containers mithilfe der oben genannten Funktion ändern? Werden die auf Daten hingewiesen werden, aber nichts anderes?

Antwort

0
  1. für diese Seite Off topic.

  2. Wenn ich eine konstante Instantiierung dieser Klasse habe, wird die Konstante gefiltert? Ja.

  3. Wenn ich einen konstanten STL-Iterator eines non const-Containers habe. Wenn const iterator dann können Sie den Iterator nicht inkrementieren oder dekrementieren, aber Sie können ihn verwenden, um seinen Referenten zu ändern. Wenn const_iterator dann können Sie es erhöhen oder verringern, aber Sie können es nicht verwenden, um seinen Referenten zu ändern. In jedem Fall können auch andere nicht-konstante Iteratoren für den Container existieren, so dass der Container von ihnen modifiziert werden kann.

+0

1. hmmm ok. Ich dachte, da gab es ein Tag "Compiler-Konstruktion", die seine Verwendung als definiert: "Das Tag [Compiler-Konstruktion] sollte auf Fragen über die Programmierung von Compilern oder Fragen über die detaillierte Innenfunktionen von Compilern angewendet werden. 3. Wirklich? Sogar mit Zeigern? Ich habe einen const_iterator, mit dem ich sage QMap :: const_iterator iter = m_bla.myObjects.begin(); ' ' iter.value() -> addPos (QPoint (i , j)); ' – codeMetis

+0

3. Ich habe einen const_iterator, der die einzige Sache ist, die m_bla.myObjects ändert, und ich drucke alles vorher und nachher. Ich kann die Änderung miterleben. Ist es eine QT spezifische Sache? – codeMetis

+0

3. Richtig natürlich Sie können nicht ändern, es ist Referent, und ich habe eine Speicheradresse, die nicht geändert wird. albern ich. Danke! Also, bedeutet das, dass Mitglied Arrays geändert werden können? Ich nehme an, dass bringt mich zu t er filtert einen Teil der Frage herunter. Es kann nicht durch Daten, auf die verwiesen wird, hinunter gefiltert werden, aber was ist mit Mitgliedern von Mitgliedern? Wie funktioniert die Filterung und wie sind benutzerdefinierte Objektmitglieder im Speicher gespeichert? – codeMetis