@ac_wingless je trouve ton message fort intéressant:
il faut bien comprendre qu'une référence sur constante présente quelques minuscules avantages cosmétiques ou situationnels
Pour moi des qu'un paramètre de ma fonction n'est plus de type simple je le passe en référence const, pour évité une recopie.
int fonction(int typSimple, const std::string& typeNonSimple)
pas de constructeur de copie
J'ai construit cette exemple qui fonctionne, j'ai raté un truc ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <iostream>
#include <vector>
class A
{
public:
const int & Value;
A(int v) : value_(v), Value( value_ )
{
}
private:
int value_;
friend std::ostream& operator<<(std::ostream& o, const A& a) { o << a.value_ ; return o ; }
};
int main()
{
A a(123);
A aa(a);
std::cout << aa << std::endl ;
} |
interdiction de déplacer l'instance en mémoire
Genre faire un memcpy sur une instance? Perso je fais jamais cela.
incompatibilité avec pratiquement toute la STL
Oui en effet sans bien comprendre pourquoi cela ne fonctionne pas
1 2 3
| A a(123);
std::vector<A> v ;
v.push_back(a); |
'operator =' function is unavailable in 'A'
Bon on peut s'en sortir avec des pointeurs et des references...
1 2 3 4
| A a(123);
std::vector<A*> v ;
v.push_back(&a);
std::cout << *(v[0]) << std::endl ; |
Pour finir en revenant sur la question posée je pense que l'utilisation des accesseurs est moins déroutante, penser au suivant développeur qui va reprendre le code. Mais elle est loin d’être bête!
Partager