const devant une fonction

const devant une fonction - C++ - Programmation

Marsh Posté le 18-11-2006 à 10:50:07    

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

Reply

Marsh Posté le 18-11-2006 à 10:50:07   

Reply

Marsh Posté le 18-11-2006 à 11:44:51    

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
Reply

Marsh Posté le 18-11-2006 à 13:02:26    

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 ?

Reply

Marsh Posté le 18-11-2006 à 13:11:06    

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

Reply

Marsh Posté le 18-11-2006 à 13:38:30    

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;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed