Wie das Schlüsselwort const in C ++

EIN Zeiger ist eine Variable, # 147-Punkte auf # 148- anderen Variablen in C ++. Das Schlüsselwort const bedeutet, dass eine Variable nicht geändert werden können, sobald sie deklariert und initialisiert wurde.

const double PI = 3.1415926535-

Argumente an Funktionen können auch deklariert werden const, was bedeutet, daß das Argument nicht in der Funktion geändert werden kann. Jedoch stellt dies eine interessante Dichotomie im Fall von Zeigervariablen. Betrachten Sie die folgende Erklärung ab:

const int * pInt-

Genau das, was ist die Konstante hier? Was können Sie nicht ändern? Ist es die Variable Pint oder die ganze Zahl deutete auf durch Pint? Es stellt sich heraus, dass beide sind möglich, aber diese Erklärung deklariert eine Variable Zeiger auf einen konstanten Speicherplatz. Somit ist die folgende:

const int * pInt- // einen Zeiger auf eine const deklarieren INTINT nVar-pInt = nVar- // dies erlaubt ist * pInt = 10 - // aber dies nicht der Fall ist

Sie können den Wert ändern Pint, beispielsweise die Zuordnung er die Adresse der nVar. Aber die endgültige Zuordnung im Beispiel Schnipsel erzeugt einen Compiler-Fehler, da Sie nicht die ändern können const int zeigte auf durch Pint.

Was ist, wenn Sie eine Zeigervariable mit einem konstanten Wert zu schaffen, hatte die Absicht? Der folgende Ausschnitt zeigt dies in Aktion:

int nVar-int * const cpInt = nVar- // einen konstanten Zeiger deklarieren // auf eine Variable integer * cpInt = 10- // jetzt diese legal ist ... cpInt ++ - // ... aber das ist nicht

die Variable cpInt ist ein konstanter Zeiger auf eine Variable int. Der Programmierer kann den Wert des Zeigers ändern, aber sie kann der Wert der ganzen Zahl ändern deutete auf.

Das const-ness kann über eine Zuordnung oder Initialisierung hinzugefügt werden, kann aber nicht (leicht) sein weggeworfen. Somit ist die folgende:

int nVar = 10-int pVar = nVar-const int * pcVar = pVar- // Das ist legalint * pVar2 = pcVar - // dies nicht der Fall ist

Die Zuordnung pcVar = pVar- in Ordnung ist - das ist das ist das Hinzufügen const Beschränkung. Die endgültige Zuordnung im Snippet ist nicht erlaubt, da es versucht das zu entfernen const-ness Beschränkung pcVar.

Eine Variable kann implizit als Teil einer Funktionsaufruf neu gefasst werden, wie im folgenden Beispiel:

Leere fn (const int nVar) -Lücke mainFn () {int n-fn (10) - // fn ruft (const int) fn (n) - // ruft die gleiche Funktion von n Behandlung} // als ob es const

Die Erklärung fn (const int) sagt, dass die Funktion fn () nicht den Wert seines Arguments ändern. Das ist wichtig, wenn man einen Verweis auf die Konstante 10 vorbei Es ist nicht wichtig, wenn ein Verweis auf die Variable mit n, aber es tut nicht weh, etwas nicht.

Endlich, const kann als Diskriminator zwischen Funktionen mit dem gleichen Namen verwendet werden:

Leere fn (const int nVar) -Lücke fn (int nVar) -Lücke mainFn () {int n-fn (10) - // Das erste functionfn nennt (n) - // ruft die zweite Funktion}

Menü