Bonjour,
J'ai deux questions en rapport avec les pointeurs constants et les constantes de manière générales :
Soit la déclaration suivante :
1) En C++, on peut définir des fonctions constantes de manière a être sur de ne pas modifier l'état d'un objet à travers cette fonction (très utile pour les getter par exemple). En C, ce mécanisme pour les fonctions n'existent pas et donc je me demandais comment je pouvais protéger la modification de mon tableau 2D à travers une fonction (ou autre) ? En gros, je ne souhaite pas pouvoir faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 typedef struct { unsigned char** matrice; int nbL, nbC; // taille matrice }Foo;
Si j'utilise, const Foo* const obj ca ne marche pas, car le compilateur m'interdit bien obj->matrice = ... ou alors obj = ... mais pas ce que je veux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void func (Foo* obj) { // je voudrais que le compilateur plante sur la ligne suivante obj->matrice[0][0] = 5; }
Le problème c'est que parfois, j'ai besoin de modifier l'intérieur de mon tableau. Je ne peux donc pas déclarer mon tableau 2D comme étant constant dès le départ...
2) Au niveau de la vitesse d'exécution du programme, est ce que les pointeurs constants et/ou qui pointent sur des constantes ont plus rapide que les pointeurs classiques lors des appels des fonctions ? Exemple :
Y'a t-il une différence de rapidité ou alors c'est pareil ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void func(Foo* pt) { // blabla en lecture seule (pt ne sera pas modifié, ni son contenu) } // VERSUS void func(const Foo* const pt) { // blabla en lecture seule (pt ne sera pas modifié, ni son contenu) }
Voilà, merci d'avance et bonne journée
Partager