Maison > développement back-end > C++ > Les variables membres C peuvent-elles être initialisées à l'aide d'arguments de constructeur portant le même nom ?

Les variables membres C peuvent-elles être initialisées à l'aide d'arguments de constructeur portant le même nom ?

Susan Sarandon
Libérer: 2024-12-12 10:53:09
original
769 Les gens l'ont consulté

Can C   Member Variables Be Initialized Using Constructor Arguments with the Same Name?

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");
    }
};
Copier après la connexion

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> &amp; vec): vec(vec) {}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal