Die Verwendung von
const int i = ...;
ein const
Objekt definieren ist für eine lange Zeit eine Quelle der Verwirrung. Es lässt die Leute das denken;
const int* ptr = ...;
definiert auch einen const
Zeiger. Das wäre eine falsche Schlussfolgerung. Wenn Sie die const
ein bisschen bewegen, ist es weniger verwirrend.
int i = ...; // Defines i to be a non-const object
int const i = ...; // Defines i to be a const object
int* ptr = ...; // Defines ptr to be a non-const pointer to a non-const object
int const* ptr = ...; // Defines ptr to be a non-const pointer to a const object
int* const ptr = ...; // Defines ptr to be a const pointer to a non-const object
int const* const ptr = ...; // Defines ptr to be a const pointer to a const object
kommend auf die Frage der Top-Level-cv-Qualifizierer,
int const i = ...;
definiert ein Objekt, dessen Typ int
und es hat const
Qualifier.
int volatile i = ...;
definiert ein Objekt, dessen Typ int
und es hat volatile
Qualifier.
int const* ptr = ...;
definiert ein Objekt, dessen Typ int const*
aber es hat keine const
oder volatile
Qualifier. Der Typ der zweiten Ebene, int
, hat const
Qualifier, jedoch nicht den Typ der obersten Ebene.
int const* const ptr = ...;
definiert ein Objekt, dessen Typ int const*
und es hat const
Qualifier. Der Typ der zweiten Ebene, int
, hat auch const
Qualifier.
int * const ptr = ...;
definiert ein Objekt, dessen Typ int*
und es hat const
Qualifier.Der Typ der zweiten Ebene, int
, hat keinen Qualifizierer const
.
Weitere Informationen:
Where is the definition of `top-level cv-qualifiers` in the C++11 Standard?
What are top-level const qualifiers?
anzeigen Erklärung 'I' –
nicht ignorieren Sie Ihre eigene Frage beantwortet, nachdem' & ci' die 'const' ist Level der Indirektion weg, aber nur Top-Level-Consts werden ignoriert –
int i; Was ich weiß ist, wenn das Objekt selbst konstant ist, ist die Konstante Top-Level, sonst Low-Level. Ich weiß nicht genau was diese Begriffe bedeuten. Ich habe deine Aussage nicht verstanden, "eine Ebene der Umleitung weg"? –