#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
Wenn ich versuche, die Variable const member t
mit 100 zu initialisieren, erhalte ich jedoch den folgenden Fehler:
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Wie kann ich einen const
Wert initialisieren ?
Antworten:
Die
const
Variable gibt an, ob eine Variable geändert werden kann oder nicht. Der zugewiesene konstante Wert wird jedes Mal verwendet, wenn auf die Variable verwiesen wird. Der zugewiesene Wert kann während der Programmausführung nicht geändert werden.Die Erklärung von Bjarne Stroustrup fasst es kurz zusammen:
Eine
const
Variable muss innerhalb der Klasse deklariert werden, kann jedoch nicht darin definiert werden. Wir müssen die const-Variable außerhalb der Klasse definieren.Hier erfolgt die Zuweisung
t = 100
in der Initialisierungsliste, viel bevor die Klasseninitialisierung erfolgt.quelle
Here the i = 10 assignment in initializer list happens much before the class initilizaiton occurs.
ich nicht verstehe, etwas näher erläutern ? Und im Grunde ist diese Art, Definitionen innerhalb der Klasse zuzulassen, compilerspezifisch, oder?operator = function not found
in VC ++ ein Fehler angezeigt. Was kann das Problem sein?Nun, du könntest es schaffen
static
:oder Sie könnten einen Mitgliedsinitialisierer verwenden:
quelle
const member
von den Funktionen / Objekten aus zugänglich sein sollte, warum dann statisch?Es gibt verschiedene Möglichkeiten, die const-Mitglieder innerhalb der Klasse zu initialisieren.
Die Definition des const-Elements im Allgemeinen erfordert auch die Initialisierung der Variablen.
1) Wenn Sie innerhalb der Klasse die Konstante initialisieren möchten, sieht die Syntax folgendermaßen aus
2) Der zweite Weg kann sein
3) Wenn Sie bei der Deklaration nicht initialisieren möchten, besteht die andere Möglichkeit darin, die Variable über den Konstruktor in der Initialisierungsliste (nicht im Hauptteil des Konstruktors) zu initialisieren. Es muss so sein
quelle
Wenn Sie das
const
Datenelement in der Klasse nicht statisch machen möchten , können Sie dasconst
Datenelement mithilfe des Konstruktors der Klasse initialisieren . Beispielsweise:Wenn die
const
Klasse mehrere Datenelemente enthält, können Sie die Elemente mithilfe der folgenden Syntax initialisieren:quelle
Sie können Ihren Compiler aktualisieren, um C ++ 11 zu unterstützen, und Ihr Code würde perfekt funktionieren.
Verwenden Sie die Initialisierungsliste im Konstruktor.
quelle
Eine andere Lösung ist
T wird also auf 100 initialisiert und kann nicht geändert werden und ist privat.
quelle
Wenn ein Mitglied ein Array ist, ist es etwas komplexer als das normale:
oder
quelle
Ein anderer möglicher Weg sind Namespaces:
Der Nachteil ist, dass auch andere Klassen die Konstanten verwenden können, wenn sie die Header-Datei enthalten.
quelle
Dies ist der richtige Weg. Sie können diesen Code ausprobieren.
Wenn Sie verwenden
C++10 Compiler or below
, können Sie das Cons-Mitglied zum Zeitpunkt der Deklaration nicht initialisieren. Hier muss also ein Konstruktor erstellt werden, um das const-Datenelement zu initialisieren. Es ist auch erforderlich, die Initialisiererliste zu verwenden, umT1():t(100)
sofort Speicher zu erhalten.quelle
Sie können hinzufügen
static
, um die Initialisierung dieser Klassenmitgliedsvariablen zu ermöglichen.Dies ist jedoch nicht immer eine gute Vorgehensweise für die Verwendung innerhalb der Klassendeklaration, da alle von dieser Klasse instanziierten Objekte dieselbe statische Variable verwenden, die im internen Speicher außerhalb des Bereichsspeichers instanziierter Objekte gespeichert ist.
quelle