J'ai vu a une gamme de pointeurs fait une différence? p> Ma compréhension est que const code> utilisé deux fois dans la déclaration d'un tableau code> statique code> avant et maintenant que je crée ma propre matrice statique, je me demande pourquoi constraînerait deux fois Dans certaines situations.
b. code> est invalide, mais si Utiliser Cons deux fois est valide, quel est son but? p> p>
4 Réponses :
const TYPE* const x;
Merci pour la réponse rapide. Je vais marquer ce correct demain.
Dans le premier bloc de code, vous avez un duplicataxe redondant Le deuxième bloc de code comporte deux scénarios différents: la première ligne permet une matrice de cinq em> points mutables em> sur Notez que vous devez initialiser un éventail de constantes: puisque vous ne pouvez pas modifier les valeurs plus tard, il n'a pas de sens de les définir ininitialisé. P> const code> dans la deuxième ligne, qui n'a aucun effet. (En fait, de bons compilateurs vous avertiront à ce sujet.) Vous déclarez une matrice de 5
Const Type CODE> S, c'est-à-dire. P>
Const Type code> S, tandis que ce dernier fait une matrice de cinq < em> constants em> pointeurs sur
Const Type code> s. P>
En fait, vous pouvez lancer autant de const code> S à un type tel que vous le souhaitez. Ils sont idempotents.
@bitmask: Oh OK, corrigé. Vous obtiendrez un avertissement de compilateur à partir de compilateurs sensibles, cependant :-) Merci!
Ooops, j'aurais peut-être mixé C et C ++ ici. Ma faute.
@bitmask: Je ne suis pas totalement sûr maintenant (je pensais que mon compilateur a dit que c'était illégal, mais je ne suis pas suffisamment pris la peine de creuser une référence standard), donc j'ai tonique la langue.
Vous pouvez appliquer n'importe quel qualificateur CV ( déclarent exactement la même chose, une constante maintenant, à la priorité; Vous pouvez dire "je veux un pointeur à une constante qui est généralement écrit comme p> Parce que le qui est couramment écrit comme < / p> dans la même veine L'opérateur de l'indice const code> ou
volatile code>) à n'importe quel type, y compris des types qualifiés CV - mais pas dans la même déclaration. Cependant, ils se lient plus fortement que n'importe quel opérateur, en ce qui concerne la priorité et peuvent être appliqués des deux côtés du type qualifié:
t code>. Si
t code> a déjà des qualificateurs de CV, cela ne change pas la signification d'une qualification supplémentaire. P>
t code>": p>
const code> se lie plus fort que le
* code> de toute façon. Dans le même motif, vous pouvez définir une variable "constante mais des points à un
t mutable code>": p>
[] code> est appliqué - avec la même présance que dans les expressions. P> P>
Utiliser const code> deux fois sur un type est illégal en C ++ 2003 mais légal en C ++ 2011 (voir 7.1.6.1 [Decl.type.cv] Paragraphe 1: "Les qualifications de CV redondantes sont ignorées." ). Lorsque vous avez utilisé
TYPE const* ptr1(0); // non-const pointer to const TYPE
TYPE* const ptr2(0); // const pointer to non-const TYPE
TYPE const* const ptr3(0); // const pointer to const TYPE