J'ai créé une classe avec la méthode, qui renvoie la référence au membre (pas une bonne encapsulation). J'utilise auto pour funtion recalibréepourquoi l'auto ne détecte pas le type de référence de la fonction
class classA
{
public:
classA(classA & rhs)
{
cout<<"copy constr A"<<endl;
};
classA() = default;
};
class classB
{
private:
classA obA;
public:
classA& getRefA(){return obA;}
};
int main()
{
classB obB;
auto ob = obB.getRefA();
}
Le résultat est copie constr A
Je comprends que l'auto ne détecte pas la référence de la fonction. Auto détecte-t-il uniquement le type sans référence?
Oui. C'est ainsi que fonctionne la déduction de type C++. Scott Meyes a beaucoup parlé de "type déduction" avec l'auto, donc vous pouvez google pour ceux qui veulent obtenir plus d'informations. Ou ramasser efficace moderne C++ par lui. il a tout un chapitre dédié à cela. – Hayt
[CppCon 2014: Scott Meyers "Déduction de type et pourquoi vous vous souciez"] (https://www.youtube.com/watch?v=wQxj20X-tIU) – Borgleader