Const dans les fonction

Résolu
DrCrow Messages postés 416 Statut Membre -  
DrCrow Messages postés 416 Statut Membre -
Bonjour,

Je trouve parfois une écriture de fonction de la sorte mais je ne sais ce que cela veut dire EXACTEMENT . les const au debut et a la fin de l'entete de la fonction
const bool maFonction( param ) const {.....; return true;}


merci d'avance de m'éclaircir.
cordialement.

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,
    Ca n'existe pas en C...
    Plutôt
     const bool maFonction( param ) {.....; return true;}

    J'ai retiré le second const.

    Il s'agit d'une indication aux compilateurs que la valeur retournée ne sera pas modifiée. Cela lui permet dans certains cas d'améliorer l'optimisation du code lors de la compilation.

    Cdlt,

    Google is your friend
    1
    1. sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   50
       
      Bonjour,
      Effectivement sous la première forme elles n'existe pas, mais également sous la re-première forme elles existe à condition qu'il complète sa définition de variable comme ceci
      exemple:
      bool maFonction( param ) const int param; { return ( (param <= 1) ? false: true ); }
      


      Deuxième point le
      const
      devant le type de la fonction ne sert pas à grandes choses tout simplement parce que les valeurs qu'elle renvoie ne peuvent être que soit faux où vrais, donc, logiquement on comprend que c'est une valeur constante absolus et il ce peut que sur certain compilateur qu'on obtienne des warning de ce genre

      source.c:4: warning: type qualifiers ignored on function return type

      La définition où les jeux de définition dans l'exemple de @gravgun , est à faire dans une fonction ou à la limite sur les paramètres de la fonction mais pas sur le type de la fonction.

      Je comprendrais pour d'autre raison ou cas utiliser un
      const 
      avec le
      bool
      sur le prototype d'une fonction mais, ça n'a pas de sens de mon point de vue sauf si on à des raison valable.
      à bientôt
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Hello,
      Oui, à condition de préciser après le const la déclaration de la variable (ici int param;).
      Cela avait la côte en K&R, mais bon, on ne la rencontre plus beaucoup aujourd'hui.
      0
  2. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut,
    const
    veut juste dire "constant", qu'on ne pourra pas modifier.
    Mis devant le type de retour de la fonction, il s'applique au type. Ici un
    const bool
    , dans la pratique, ne diffère pas d'un
    bool
    tout court car sa valeur est copiée, et ce n'est pas un pointeur. En effet le programme suivant ne génèrera aucune erreur (avec
    gcc -std=c99 -Wall -o test test.c
    ):
    #include <stdbool.h>
    const bool test() { return true; }
    int main() {
    	bool z = test();
    	(void) z; // Pour pas que le compilo
    	//se plaigne d'une variable pas utilisée
    	return 0;
    }

    A partir d'ici je généralise: ça vaut donc pour les types de retour, d'argument et de variables.
    bool * b;
    est un pointeur vers un booléen.
    const bool * b;
    est un pointeur vers un booléen dont on ne peut pas changer la valeur (donc impossible de faire
    *a = false
    )
    bool *const b;
    est un pointeur de bool dont on ne peut pas changer où il pointe, mais changer le contenu pointé; on peut faire
    *a = false
    mais pas
    bool a = false; b = &a;
    )
    const bool *const b;
    est un pointeur inchangeable vers un bool inchangeable. Une pseudo-constante quoi.

    Quant au
    const
    après le nom de la fonction, c'est du C++ et non du C. C'est pour indiquer qu'on ne peut pas modifier l'objet
    this
    ou ses membres dans la fonction.
    1
    1. DrCrow Messages postés 416 Statut Membre 19
       
      Bonjour,
      Oui voila, c'était ce que je cherchais, j'ai du confondre C et C++ pour le const après le nom de la fonction.
      merci à vous tous pour vos réponse.
      Cordialement.
      0