Je parcourais du code que j'ai écrit pour un projet d'école, qui à une inspection plus étroite semblait étrange pour moi. J'ai eu une classe similaire à celle ci-dessous: pourquoi est le premier appel à push_back code> une instruction valide, même si
str code> est pas un
foo code>? p> p>
3 Réponses :
Le premier retour à l'autre initialisera automatiquement un objet (s'attend à un objet Pour plus de détails, voir E.g.: P>
foo code> donné une chaîne code> objet code>; via votre liste d'initialistes. P>
FOO code>, obtient une chaîne: peut être initialisé un objet
foo code> avec une seule chaîne? Oui, sa liste d'initialistes a un seul élément et l'objet est initialisé à partir de cet élément). p>
La liste d'initialistes ne devrait pas être significative. Va toujours compiler sans elle.
Et si foo (std :: string s) code> est
explicite code>?
Je pense que dans le premier bouton, il est automatiquement initialise foo (str) code>
Donc, c'est fondamentalement la même chose! P>
classe foo code> a une CTOR non explicite prenant un argument de type
std :: string code> (c.-à-d.
std :: chaîne code>.
f.push_back(str); // invalid now
f.push_back(Foo(str)); // still valid
Cela devrait être la réponse acceptée car il parle de explicite code>