const et pointeur de pointeur - C++ - Programmation
Marsh Posté le 02-01-2007 à 15:06:21
ReplyMarsh Posté le 02-01-2007 à 15:26:29
karlkox a écrit :
|
le fait que ca sorte une erreur n'est pas forcément évident.
La solution réside probablement dans un simple const_cast en faisant attention à ce que la fonction fait de var
Marsh Posté le 02-01-2007 à 15:38:09
Mais alors quand je fait ceci pourquoi je n'ait aucune erreur :
Code :
|
Marsh Posté le 02-01-2007 à 15:41:00
parce que ta fonction peut modifier l'adresse pointée par var et y mettre l'adresse d'un pointeur sur entier constant, auquel cas, il faut que ce qui est au-dessus de l'appel de fonction soit conscient que le pointeur est constant. Dans ton deuxième cas, ce n'est pas le cas, c'est juste un renforcement de la constance de l'expression
Marsh Posté le 02-01-2007 à 16:29:41
Ha ok, j'ai donc fait ceci et ça fonctionne, merci :
int fct(const int * const* var)
{
}
Marsh Posté le 02-01-2007 à 16:48:32
euh... je veux pas passer pour un boolay, mais j'ai pas compris pkoi ça compile pas !
Enfin, je vois pas pourquoi on peut pas convertir un int** en const int**
Normalement la promotion vers const est automatique, c'est le contraire qui est interdit !
Et je vois pas non plus en quoi utiliser < const int * const* var > comme paramètre peut résoudre le pb !
Comme ça j'apprendrai un truc aujourd'hui !
Marsh Posté le 02-01-2007 à 17:25:50
un exemple vaut mieux qu'un long discours :
Code :
|
voilà, si cette écriture était permise, alors j'aurais fait un accès en écriture à une constante sans pour autant que le compilateur ne s'en soit plaint, ce qui n'est pas acceptable.
Ainsi, rendre le pointeur lui-même constant lève cette possibilité et rend à nouveau le typage correct (en espérant que ca clarifie les choses)
Marsh Posté le 02-01-2007 à 17:58:46
ok j'ai compris, mais j'aurais jamais pensé à ça tout seul. Donc on peut convertir un int** en const int* const* mais pas en const int**
C'est qd même pas très intuitif, mais si en effet c'est correct
Marsh Posté le 03-01-2007 à 00:48:16
Si tu as l'occasion de lire le psaume §4.4.4 (condition 3), tu auras une idée du pourquoi c'est si peu intuitif
Marsh Posté le 03-01-2007 à 00:54:49
++fab a écrit : Si tu as l'occasion de lire le psaume §4.4.4 (condition 3), tu auras une idée du pourquoi c'est si peu intuitif |
j'ai eu le réflexe d'aller fouiner dans le K&R mais §4 rien a voir.
Marsh Posté le 03-01-2007 à 01:01:46
-ThX- a écrit : j'ai eu le réflexe d'aller fouiner dans le K&R mais §4 rien a voir. |
§4.4.4 du standard C++.
Marsh Posté le 03-01-2007 à 11:34:42
++fab a écrit : §4.4.4 du standard C++. |
c'est pas le chapitre 4.4.4 du Stroustrup non plus, je n'ai que ça, j'ai pas la norme
Marsh Posté le 03-01-2007 à 23:31:41
jesus_christ a écrit : c'est pas le chapitre 4.4.4 du Stroustrup non plus, je n'ai que ça, j'ai pas la norme |
m'enfin, c'est pourtant le livre saint de la religion C++
Spoiler : Je n'ai qu'une version papier, et j'ai un peu de mal à me motiver à recopier l'extrait en question |
Marsh Posté le 02-01-2007 à 14:56:20
Bonjour,
J'ai ce code :
Et à la compilation :
a.cpp: In function 'int main()':
a.cpp:9: error: invalid conversion from 'int**' to 'const int**'
a.cpp:9: error: initializing argument 1 of 'int fct(const int**)'
Pourquoi ai-je cette erreur et comment la corriger ?
Merci...