Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1060 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  const devant une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

const devant une fonction

n°1477720
casafa
Posté le 18-11-2006 à 10:50:07  profilanswer
 

Bonjour,
 
Voici le prototype d'une fonction membre:
const T& get(void) const;
 
Que signifie le premier const ?
 
Merci...

mood
Publicité
Posté le 18-11-2006 à 10:50:07  profilanswer
 

n°1477730
++fab
victime du syndrome IH
Posté le 18-11-2006 à 11:44:51  profilanswer
 

casafa a écrit :

Voici le prototype d'une fonction membre:
const T& get(void) const;


Ce n'est pas le prototype d'une fonction membre. Une fonction membre aurait plutôt le
prototype suivant :
const T& Class::get() const;
(note que le void pour dire "pas de paramètres" n'est utile qu'en C.)
 

Citation :

que signifie le premier const ?


const se rapporte à ce qui est situé immédiatement avant. Ici, il n'y a rien avant. Dans  
ce cas, il se rapporte à ce qui est placé immédiatement après : ici T.
 
ceci est donc synonyme :
T const& Class::get() const;
 
Class::get() const retourne une référence constante sur un T.


Message édité par ++fab le 18-11-2006 à 11:45:04
n°1477740
casafa
Posté le 18-11-2006 à 13:02:26  profilanswer
 

Merci pour cette réponse mais:
1) Le "Class::" n'est pas obligatoire dans la classe elle-même...donc on peut considérer que c'est un prototype de fonction, non ?
2) "Class::get() const retourne une référence constante sur un T." Oui c'est bien ce que j'avait compris mais qu'est ce que ça signifie "référence constante sur un T" ?
Ca veut dire que T ne sera jamais modifier dans la classe Class ?

n°1477742
jesus_chri​st
votre nouveau dieu
Posté le 18-11-2006 à 13:11:06  profilanswer
 

non, ça veut dire que tu ne pourras pas modifier le T à travers la référence renvoyée.
 
const string& toto() const;
 
const string& s = toto();
s.clear(); // interdit, je ne peux pas modifier s car c'est une const-référence

n°1477755
++fab
victime du syndrome IH
Posté le 18-11-2006 à 13:38:30  profilanswer
 

casafa a écrit :


1) Le "Class::" n'est pas obligatoire dans la classe elle-même...donc on peut considérer que c'est un prototype de fonction, non ?


Je ne sais pas et tu peux considérer que ma réponse était inexacte. Je ne connais pas la définition exacte de ce qu'est un prototype de fonction. En revanche pour une déclaration ou une définition, c'est plus claire. Une déclaration a une portée; par exemple:

Code :
  1. // déclaration d'une fonction dans la portée A qui est une classe.
  2. // Si la portée directement englobante n'était pas une classe, le deuxième const serait illégal.
  3. class A
  4. {
  5.     const T& get() const;
  6. };
  7. // définition d'une fonction "membre" de la portée A. En réalité, tu est sur que cette portée est une classe au vu du const final.
  8. const T& A::get() const { /*...*/ }
  9. // Ceci est une erreur à cause du const final. (déclaration dans la namespace scope globale)
  10. const T& get() const;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  const devant une fonction

 

Sujets relatifs
[resolu]problème avec une fonctionJS : passage de fonction à une fonction
Aide pour module TV stream, ajouté une fonction SQL en plus.Appeler fonction avec NuSoap
[Mprojector] J'ai un problème avec la fonction MFile[Résolu] Changer le "body background" en fonction de la résolution
Question de débutant sur la fonction menu.addChildformater un nombre avec des zéro devant
Fonction javascript click() incompatible avec Mozilla 
Plus de sujets relatifs à : const devant une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR