[débutant] Caster un "const int ARRAY[4]" en "int ARRAY[4]"

Le
tsalm
Bonjour,

En essayant de faire :
const int LISTITEM_COLUMNS_WIDTH[4] = {40,40,40,40} ;
int arr[4] = LISTITEM_COLUMNS_WIDTH ;

mon compilateur me retourne une erreur de compilation
error C2440: 'initialisation' : impossible de convertir de 'const int
[4]' en 'int [4]'

Est-il possible de valoriser, sans passer par un memcpy, "arr" avec les
valeurs de LISTITEM_COLUMNS_WIDTH ?

D'avance merci,
TSalm
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien LE LEZ
Le #19833651
On Sun, 26 Jul 2009 15:52:03 +0200, tsalm
const int LISTITEM_COLUMNS_WIDTH[4] = {40,40,40,40} ;
int arr[4] = LISTITEM_COLUMNS_WIDTH ;



std::vector<int> arr (LISTITEM_COLUMNS_WIDTH,
LISTITEM_COLUMNS_WIDTH+4);

Note que de toute façon, les valeurs devront être copiées, puisque le
contenu de "LISTITEM_COLUMNS_WIDTH" est marqué const, et ne peut donc
pas être modifié.
Mathias Gaunard
Le #19834971
On 26 juil, 15:52, tsalm
Bonjour,

En essayant de faire :
   const int LISTITEM_COLUMNS_WIDTH[4] = {40,40,40,40} ;
   int arr[4]  = LISTITEM_COLUMNS_WIDTH ;

mon compilateur me retourne une erreur de compilation
   error C2440: 'initialisation' : impossible de convertir de 'cons t int  
[4]' en 'int [4]'

Est-il possible de valoriser, sans passer par un memcpy, "arr" avec les  
valeurs de LISTITEM_COLUMNS_WIDTH ?



Quel est le problème avec memcpy ?
Un bon compilateur devrait remplacer ça dans les cas où cela a du
sens.
James Kanze
Le #19835711
On Jul 26, 11:28 pm, Mathias Gaunard
On 26 juil, 15:52, tsalm


> En essayant de faire :
> const int LISTITEM_COLUMNS_WIDTH[4] = {40,40,40,40} ;
> int arr[4] = LISTITEM_COLUMNS_WIDTH ;



> mon compilateur me retourne une erreur de compilation
> error C2440: 'initialisation' : impossible de convertir de 'const in t
> [4]' en 'int [4]'



> Est-il possible de valoriser, sans passer par un memcpy,
> "arr" avec les valeurs de LISTITEM_COLUMNS_WIDTH ?



Quel est le problème avec memcpy ?
Un bon compilateur devrait remplacer ça dans les cas où cela a
du sens.



Le problème, c'est que si on remplace le tableau avec quelque
chose de plus raisonable (p.e. std::vector> par la suite, ça ne
marche plus, bien que ça compile sans erreur. Le problème, c'est
que si on remplace double par un type défini par l'utilisater
(p.e. BigDecimal) par la suite, ça ne marche plus, bien que ça
compile.

Utiliser std::copy, plutôt que memcpy, me semble le minimum.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Mathias Gaunard
Le #19836691
On 27 juil, 09:40, James Kanze
Utiliser std::copy, plutôt que memcpy, me semble le minimum.



Le problème de std::copy, c'est qu'en pratique il va faire un memmove
et pas un memcpy.
Fabien LE LEZ
Le #19836761
On Mon, 27 Jul 2009 03:39:31 -0700 (PDT), Mathias Gaunard

Utiliser std::copy, plutôt que memcpy, me semble le minimum.



Le problème de std::copy, c'est qu'en pratique il va faire un memmove
et pas un memcpy.



std::copy va copier les éléments un par un.

J'ai du mal à comprendre la différence entre memmove et memcopy ici,
et le problème que ça pose, mais de toute façon aucune des deux ne
sera appelée.
James Kanze
Le #19837431
On Jul 27, 12:39 pm, Mathias Gaunard
On 27 juil, 09:40, James Kanze


> Utiliser std::copy, plutôt que memcpy, me semble le minimum.



Le problème de std::copy, c'est qu'en pratique il va faire un
memmove et pas un memcpy.



Qu'est-ce que tu raccontes là ? Il ne doit faire ni l'un ni
l'autre. Mais il va copier les objets, non des bytes. Ce qui
veut dire d'une part qu'il marche avec n'importe quel type
d'objet qui supporte la copie correctement, et de l'autre, qu'il
y a même des chances qu'il soit plus rapid, parce que le
compilateur a plus d'informations. (Il pourrait savoir, par
exemple, que les pointeurs sont alignés.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Publicité
Poster une réponse
Anonyme