const int =int const?

const int =int const?

Sie sind beide gültiger Code und sie sind beide gleichwertig. Für einen Zeigertyp sind sie zwar beide gültiger Code, aber nicht äquivalent.

Deklariert 2 Ints, die konstant sind:

int const x1 = 3;
const int x2 = 3;

Deklariert einen Zeiger, dessen Daten nicht durch den Zeiger geändert werden können:

const int *p = &someInt;

Deklariert einen Zeiger, der nicht geändert werden kann, um auf etwas anderes zu zeigen:

int * const p = &someInt;

Ja, sie sind gleich. Die Regel in C++ ist im Wesentlichen diese const gilt für den Typ links davon. Es gibt jedoch eine Ausnahme:Wenn Sie es ganz links in der Deklaration platzieren, gilt es für den ersten Teil des Typs.

Zum Beispiel in int const * Sie haben einen Zeiger auf eine konstante Ganzzahl. In int * const Sie haben einen konstanten Zeiger auf eine ganze Zahl. Sie können dies auf Zeiger auf Zeiger extrapolieren, und das Englische mag verwirrend werden, aber das Prinzip ist dasselbe.

Für eine weitere Diskussion über die Vorzüge, eins über das andere zu tun, siehe meine Frage zu diesem Thema. Wenn Sie neugierig sind, warum die meisten Leute die Ausnahme verwenden, kann dieser FAQ-Eintrag von Stroustrup hilfreich sein.


Ja, das ist genau das gleiche. Es gibt jedoch Unterschiede in den Zeigern. Ich meine:

int a;

// these two are the same: pointed value mustn't be changed
// i.e. pointer to const value
const int * p1 = &a;
int const * p2 = &a;

// something else -- pointed value may be modified, but pointer cannot point
// anywhere else i.e. const pointer to value
int * const p3 = &a;

// ...and combination of the two above
// i.e. const pointer to const value
const int * const p4 = &a;