Lors de mon dernier exercice, face aux complaintes du compilateur, j'ai du me résoudre à fournir une implémentation constante de l'une des fonction membre de ma classe, et je ne suis pas sûre d'en comprendre tous les tenants et aboutissants.
Dans quel(s) cas faut-il fournir une implémentation constante d'une fonction membre, et pourquoi ?
Après je pense que le seul contexte où c'est justifiable, c'est une fonction d'accès à un élément de conteneur (disponible tout le temps, const ou pas), et de modification (non const), enfin la seule situation qui me vienne à l'esprit pour le moment.
On va faire ça pour les accesseurs. Le C++ ne distingue pas lecture d'écriture, mais appliqué sur un objet modifiable ou non.
Du coup il faut la surcharge pour les objets modifiables (qui gère lecture et écriture), et celle sur les non modifiables qui ne gèrent qu'écriture.
Ceci dit depuis peu, je vois une nouvelle tendance: https://en.cppreference.com/w/cpp/container/span/operator_at Je n'adhère pas encore à cette approche car elle permet de modifier les éléments malgré que l'objet frontal soit non modifiable. C'est juste si le paramètre est const que l'on va interdire l'écriture.
Personnellement ça ne me choque pas plus que ça quand std::span retourne un élément non-const alors que son opérateur est const.
La raison derrière est assez bête, la vue indique elle-même si elle référence des valeurs const ou non. Cela se rapproche plus du comportement du langage vis-à-vis des indirections: pas de propagation du const pour le référé.
using T = int&;
using U = T const&;
ici U == T
Si on veut une vue sur des valeurs constantes, autant partir sur span<const T> qui apporte la même chose qu'un span sur un T non constant qui retourne une référence const avec [].
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Liens utiles pour le C++
Liens utiles pour le C++