Envoyé par
Ekleog
La SL faisant la duplication de fonctions membres, je pense que c'est une bonne idée de faire pareil.
Et, comme en général les fonctions renvoyant des iterator sont assez peu nombreuses, il n'est pas gênant de les doubler en ayant l'une qui fait appel à l'autre. (au passage, implémenter la version non const à partir de la const est la bonne méthode, selon Effective C++).
C'est ce que j'ai fait, d'ailleurs c'est le seul endroit où j'ai utilisé un const_cast appliqué sur le retour de la méthode const utilisé dans la méthode non constante.
Envoyé par
oodini
Une fonction qui ne modifie rien se caractérise par un const en fin de signature, pas par la constance de ce qu'elle retourne.
Mais cela s'entend pour une fonction membre, par rapport aux données membre.
Je parlais plutôt des arguments de type constant même si il se trouve que le retour est constant également. Mais justement ta remarque et d'après: http://www.parashift.com/c++-faq-lit...html#faq-18.10 qui ne parle que de l'état de l'objet qui doit être conservé (pas les arguments) cela me fait penser qu'il est possible d'avoir une 3 méthode (une constante) avec des arguments non constant:
iterator trouverFrere(iterator membre) const;
En plus des 2 autres:
1 2
| const_iterator trouverFrere(const_iterator membre) const;
iterator trouverFrere(iterator membre); |
Mais je n'ai jamais vu ça, car on retourne un iterator non constant qui comme Ekleog dit:
Envoyé par
Ekleog
Sauf si l'iterator pointe vers la structure elle-même, auquel cas retourner un iterator serait une violation du contrat (au même titre que le serait un T & operator [] (size_t) const dans vector)
Partager