Zum Beispiel istconst int = int const?
int const x = 3;
gültige Code?
Wenn ja, bedeutet es das gleiche wie
const int x = 3;
?
Zum Beispiel istconst int = int const?
int const x = 3;
gültige Code?
Wenn ja, bedeutet es das gleiche wie
const int x = 3;
?
Sie sind beide gültigen Code und sie sind beide gleichwertig. Für einen Zeigertyp sind sie zwar beide gültig, 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:
const int *p = &someInt;
erklärt, einen Zeiger, der nicht auf etwas anderes geändert werden kann Punkt:
int * const p = &someInt;
Und 'const int * const p = & someInt;' würde Ihnen einen Zeiger geben, der nicht auf einen Wert geändert werden kann, der nicht geändert werden kann, wenn ich mich nicht irre. – JAB
@JAB: Ja, es gibt Ihnen einen Zeiger, der nicht geändert werden kann, zusätzlich zu Daten, die innerhalb des Zeigers durch diesen Zeiger nicht geändert werden können. –
Das Muster wird hier deutlich, wenn die Definitionen ** rückwärts gelesen werden. Zum Beispiel: '[const int *]' = ein Zeiger ('*') auf ein 'int', das' const' ist. '[int * const]' = ein 'const' Zeiger (' * ') auf ein' int'. – stakx
Ja, das ist genau das gleiche. Es gibt jedoch einen Unterschied 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;
Dies ist die vollständigste Antwort. – anthropomorphic
Es ist das gleiche in Bedeutung und Gültigkeit.
Soweit ich weiß, wird const nur komplex, wenn es sich um Zeiger handelt.
int const * x;
int * const x;
sind unterschiedlich.
int const * x;
const int * x;
sind gleich.
Ja, sie sind gleich. Die Regel in C++ ist im Wesentlichen, dass const
für den Typ auf der linken Seite gilt. Es gibt jedoch eine Ausnahme, wenn Sie es auf der äußersten linken Seite der Deklaration platzieren, gilt es für den ersten Teil des Typs.
Zum Beispiel in int const *
haben Sie einen Zeiger auf eine konstante ganze Zahl. In int * const
haben Sie einen konstanten Zeiger auf eine ganze Zahl. Sie können dies auf Zeiger auf Zeiger extrapolieren, und das Englisch kann verwirrend werden, aber das Prinzip ist das gleiche.
Für eine weitere Diskussion über die Verdienste, einen über den anderen zu tun, siehe my question zum Thema. Wenn Sie neugierig sind, warum die meisten Leute die Ausnahme verwenden, kann this FAQ entry von Stroustrup hilfreich sein.
Genau was ich dachte. 'const int x' ist die Ausnahmeform. 'int const x' entspricht dem gleichen Muster wie' int * const x'. Wenn Sie einen konstanten Zeiger auf ein konstantes int benötigen, schreibe ich es normalerweise als int const const anstatt const int const. – Cogwheel
@ Zahnrad - präzise. Wenn man sich erst einmal bewusst ist, dass die "normale" Form des "const" ganz links einen Ausnahmefall darstellt, stellt sich die Frage, auf welche Weise der Code auf lange Sicht tatsächlich klarer wird. Daher meine Frage http://stackoverflow.com/questions/988069/in-cis-is-const-after-type-id-acceptable –
@ T.E.D. ** Die Regel in C++ besteht im Wesentlichen darin, dass const auf den Typ zu seiner Linken angewendet wird. ** Gibt es dafür ein Zitat von bekannten Programmiergurus oder nur eine Art von verständlichem Ding. Auch im "const int * p1". Es gibt nichts auf der linken Seite von const. Wie man die Regel in diesem Szenario anwendet. –
Von "Effective C++" Artikel 21
char *p = "data"; //non-const pointer, non-const data
const char *p = "data"; //non-const pointer, const data
char * const p = "data"; //const pointer, non-const data
const char * const p = "data"; //const pointer, const data
zumindest in MSVC – Andrey
Was sagt der Compiler? –
@Hamish: einige Compiler akzeptieren alle Arten von ungültigem Code; Der einzige Weg, um sicher zu sein, dass etwas gültig ist, ist, in den Standard zu schauen oder zu fragen. –