Maison  >  Article  >  développement back-end  >  Pouvez-vous construire un objet C en l’utilisant comme argument ?

Pouvez-vous construire un objet C en l’utilisant comme argument ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-10 18:45:02663parcourir

Can You Construct a C   Object Using Itself as an Argument?

Passer un objet C dans son propre constructeur : est-ce légal ?

Il peut paraître surprenant de découvrir que construire un objet à partir de lui-même dans C est en effet autorisé. Le code suivant démontre ce comportement inattendu :

#include <iostream>

struct Foo {
    Foo(Foo& bar) {
        std::cout << &bar << std::endl;
    }
};

int main(int argc, char** argv) {
    Foo foo(foo); // This works!
    std::cout << &foo << std::endl; // And this works too...
}

Dans ce code, un objet de type Foo est passé en argument à son propre constructeur. Cela peut sembler être une définition circulaire, mais les normes C le permettent en réalité.

Bien que l'objet foo ne soit pas initialisé, le code le manipule d'une manière autorisée par la norme. Plus précisément, avant qu'un objet ne soit complètement initialisé, il est autorisé de lui lier une référence ou de prendre son adresse.

Ce comportement est expliqué plus en détail dans le rapport de défaut 363, qui conclut que les références sont valides et qu'il est permis de prendre l'adresse d'un objet de classe avant qu'il ne soit complètement initialisé et la fournir comme paramètre de référence.

Bien qu'il puisse être inhabituel ou peu pratique d'utiliser ce comportement, il donne un aperçu du fonctionnement interne des classes et des moyens limités dans lequel un objet non initialisé peut être manipulé.

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!

Déclaration:
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