Initialisation des variables membres avec des arguments de constructeur du même nom
En C, il est possible d'initialiser des variables membres en utilisant des arguments de constructeur portant les mêmes noms comme variables membres. Cette technique, comme démontré dans l'exemple ci-dessous, a été confirmée pour fonctionner sans avertissements ni erreurs lorsqu'elle est compilée avec g 4.4 et clang .
class Blah { std::vector<int> vec; public: Blah(std::vector<int> vec): vec(vec) {} void printVec() { for (unsigned int i = 0; i < vec.size(); i++) printf("%i ", vec.at(i)); printf("\n"); } };
Selon la norme C (§12.6.2/7), cette initialisation est légale et garantie de fonctionner. Les noms dans la liste d'expressions d'un initialiseur mem sont évalués dans la portée du constructeur, permettant au pointeur this d'être utilisé pour faire référence à l'objet en cours d'initialisation.
Dans l'exemple ci-dessus, l'argument du constructeur vec est initialisé avec la variable membre vec du même nom. Cette initialisation se produit à chaque fois qu'un objet de classe Blah est créé.
Recommandation
Envisagez d'accepter le paramètre constructeur comme référence const pour éviter une copie inutile de l'objet vectoriel d'origine , comme on le voit ci-dessous :
Blah(const std::vector<int> & vec): vec(vec) {}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!