Heim > Backend-Entwicklung > C++ > Können Sie ein C-Objekt konstruieren, indem Sie sich selbst als Argument verwenden?

Können Sie ein C-Objekt konstruieren, indem Sie sich selbst als Argument verwenden?

Mary-Kate Olsen
Freigeben: 2024-11-10 18:45:02
Original
707 Leute haben es durchsucht

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

Übergabe eines C-Objekts an seinen eigenen Konstruktor: Ist das legal?

Es mag überraschend erscheinen, herauszufinden, dass das Konstruieren eines Objekts aus sich selbst in C ist tatsächlich zulässig. Der folgende Code demonstriert dieses unerwartete Verhalten:

#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...
}
Nach dem Login kopieren

In diesem Code wird ein Objekt vom Typ Foo als Argument an seinen eigenen Konstruktor übergeben. Dies scheint eine zirkuläre Definition zu sein, aber die C-Standards erlauben dies tatsächlich.

Obwohl das Objekt foo nicht initialisiert ist, manipuliert der Code es auf eine vom Standard zugelassene Weise. Insbesondere ist es erlaubt, einen Verweis darauf zu binden oder seine Adresse zu übernehmen, bevor ein Objekt vollständig initialisiert ist.

Dieses Verhalten wird im Fehlerbericht 363 näher erläutert, der zu dem Schluss kommt, dass Verweise gültig und zulässig sind Ermitteln Sie die Adresse eines Klassenobjekts, bevor es vollständig initialisiert ist, und stellen Sie es als Referenzparameter bereit.

Obwohl es ungewöhnlich oder unpraktisch sein kann, dieses Verhalten zu nutzen, bietet es Einblicke in das Innenleben von Klassen und die begrenzten Möglichkeiten, wie ein nicht initialisiertes Objekt manipuliert werden kann.

Das obige ist der detaillierte Inhalt vonKönnen Sie ein C-Objekt konstruieren, indem Sie sich selbst als Argument verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage