7
votes

C ++ const utilisé deux fois dans la déclaration de tableau statique

J'ai vu const utilisé deux fois dans la déclaration d'un tableau statique avant et maintenant que je crée ma propre matrice statique, je me demande pourquoi constraînerait deux fois Dans certaines situations.

a une gamme de pointeurs fait une différence? xxx

Ma compréhension est que b. est invalide, mais si Utiliser Cons deux fois est valide, quel est son but?


0 commentaires

4 Réponses :


16
votes
const TYPE* const x;

1 commentaires

Merci pour la réponse rapide. Je vais marquer ce correct demain.



0
votes

Dans le premier bloc de code, vous avez un duplicataxe redondant const 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 S, c'est-à-dire.

Le deuxième bloc de code comporte deux scénarios différents: la première ligne permet une matrice de cinq points mutables sur Const Type S, tandis que ce dernier fait une matrice de cinq < em> constants pointeurs sur Const Type s.

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é.


4 commentaires

En fait, vous pouvez lancer autant de const 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.



1
votes

Vous pouvez appliquer n'importe quel qualificateur CV ( const ou volatile ) à 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é: xxx

déclarent exactement la même chose, une constante t . Si t a déjà des qualificateurs de CV, cela ne change pas la signification d'une qualification supplémentaire.

maintenant, à la priorité; Vous pouvez dire "je veux un pointeur à une constante t ": xxx

qui est généralement écrit comme xxx < / Pré>

Parce que le const se lie plus fort que le * de toute façon. Dans le même motif, vous pouvez définir une variable "constante mais des points à un t mutable ": xxx

qui est couramment écrit comme < / p> xxx

dans la même veine L'opérateur de l'indice [] est appliqué - avec la même présance que dans les expressions.


0 commentaires

0
votes

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


0 commentaires