OVH Cloud OVH Cloud

Position du "const"

9 réponses
Avatar
Sébastien V.
Bonjour,

Un certain nombre de questions on déjà été posé quant à la position du const
à adopter concernant des objets. Or, je viens de trouver dans un bout de
code ça :
const A* const InstanceA;

J'ai le sentiment qu'il y a un doublon : ais_je raison .?

Sébastien

9 réponses

Avatar
Christophe de VIENNE
Bonjour,

Sébastien V. wrote:
const A* const InstanceA;

J'ai le sentiment qu'il y a un doublon : ais_je raison .?



non :-)

le premier const s'applique au 'A', et le second au '*'.
On aurait pu aussi écrire :
A const * const


Par contre ceci :
const A const *

contient un doublon : les deux const s'appliquent à 'A'


A+

Christophe

Avatar
Sébastien V.
"Christophe de VIENNE" a écrit dans le message
news: newscache$gqwyoh$y5d$
Bonjour,

Sébastien V. wrote:
const A* const InstanceA;

J'ai le sentiment qu'il y a un doublon : ais_je raison .?



non :-)

le premier const s'applique au 'A', et le second au '*'.
On aurait pu aussi écrire :
A const * const




Effectivement je pensais pas que c'était analogue à ça : Merci :-)



Par contre ceci :
const A const *

contient un doublon : les deux const s'appliquent à 'A'


A+

Christophe




Avatar
Christophe de VIENNE
Sébastien V. wrote:
"Christophe de VIENNE" a écrit dans le message
news: newscache$gqwyoh$y5d$

Bonjour,

Sébastien V. wrote:

const A* const InstanceA;

J'ai le sentiment qu'il y a un doublon : ais_je raison .?



non :-)

le premier const s'applique au 'A', et le second au '*'.
On aurait pu aussi écrire :
A const * const





Effectivement je pensais pas que c'était analogue à ça : Merci :-)




Le piège avec le const préfixé, c'est quand il y a des typedefs :

typedef A* A_ptr;
const A_ptr; // equivalent à 'A * const'
// et non 'const A *' ou 'A const *'

et si on écrivait:

const A_ptr const; // equivalent à A * const const

là il y aurait doublon


A+

Christophe



Avatar
Zouplaz
Christophe de VIENNE - :


le premier const s'applique au 'A', et le second au '*'.
On aurait pu aussi écrire :
A const * const



J'ai lu la FAQ mais peux tu traduires l'effet produit ??


Merci...

Avatar
Christophe de VIENNE
Zouplaz wrote:
Christophe de VIENNE - :


le premier const s'applique au 'A', et le second au '*'.
On aurait pu aussi écrire :
A const * const




J'ai lu la FAQ mais peux tu traduires l'effet produit ??



petit exemple :

class A {};

int main()
{
A a;
A const * const a1 = &a;
A const * a2;

a2 = a1; // légal : a2 est une variable non const,
// donc on peut l'affecter. Dans le cas présent
// c'est l'objet pointé qui est constant et qu'on ne
// peut pas modifier.

a1 = a2; // pas légal : a1 est constant, on ne peut l'affecter.

return 0;
}


Est-ce que ça répond à ta question ?

A+

Christophe


Avatar
Jean-Marc Molina
Bonjour,

Ça m'intéresse aussi car je n'ai jamais utilisé un double const, je vois pas
quel effet ça peut produire ni ce que ça peut apporter... Le pointeur est
const mais le second je vois pas ce qu'il fait... J'ai déjà vu ça plusieurs
fois mais trop rarement.

JM

--
Europe > France > Lyon
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Avatar
darkman_spam
Zouplaz wrote in message news:...

Christophe de VIENNE - :

le premier const s'applique au 'A', et le second au '*'.
On aurait pu aussi écrire :

A const * const


J'ai lu la FAQ mais peux tu traduires l'effet produit ??


Un pointeur constant vers un `A´ constant.

Tu ne peux modifier ni le pointeur, càd vers quel objet il pointe,
ni l'objet pointé, de type `A´ (enfin, de type `A const´).

--drkm


Avatar
Jean-Marc Molina
C'est bien beau tout ça mais c'est quoi l'intérêt ?
Un pointeur c'est dynamique, une constante c'est tout sauf dynamique.
Donc je vois pas l'intérêt d'une variable const pointeur const...

Un exemple d'application, du concret quoi :)

JM

--
Europe > France > Lyon
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Avatar
Fabien LE LEZ
On Fri, 28 Nov 2003 13:39:12 +0100, "Jean-Marc Molina"
wrote:

Un pointeur c'est dynamique


Où as-tu été pêcher ça ?

int const CTE1= 10;
int const CTE2= 12;

int const *ptr= &CTE1;
ptr= &CTE2; // légal, puisque la variable ptr de type "pointeur" n'est
pas const

int const * const ptr2= &CTE1;
ptr2= &CTE2; // illégal : ptr2 est de type "pointeur const" (sur un
int const)


int i1= 1;
int i2= 2;

int * const ptr3= &i1;
*ptr3= 12; // Maintenant i1=
ptr3= &i2; // illégal : ptr3 est un "pointeur const" (sur un int)

Un "pointeur const" ressemble un peu à une référence : il pointe
toujours sur la même variable.

--
;-)