Heim > Backend-Entwicklung > C++ > Warum erstellt „Class object();' kein C-Objekt?

Warum erstellt „Class object();' kein C-Objekt?

Susan Sarandon
Freigeben: 2024-12-18 11:04:10
Original
721 Leute haben es durchsucht

Why Doesn't `Class object();` Create a C   Object?

Das Fehlen eines Konstruktoraufrufs verstehen

In C werden Konstruktoren verwendet, um Objekte einer Klasse zu initialisieren. Im bereitgestellten Codeausschnitt wird der Konstruktor jedoch nicht aufgerufen, was zu unerwartetem Verhalten führt.

Das Problem

Die problematische Zeile:

Class object();
Nach dem Login kopieren
Nach dem Login kopieren

tatsächlich nicht Rufen Sie den Konstruktor für die Class-Klasse auf. Stattdessen deklariert es eine Funktion, die ein Klassenobjekt zurückgibt. Um den Konstruktor korrekt aufzurufen und ein Objekt zu erstellen, muss ein Semikolon (;) an die Zeile angehängt werden:

Class object;
Nach dem Login kopieren

Behind the Scenes: The Most Vexing Parse

Das erste Code-Snippet wird hervorgehoben ein Problem, das als das „ärgerlichste Parsen“ in C bekannt ist. Wenn er auf die Zeile:

Class object();
Nach dem Login kopieren
Nach dem Login kopieren

stößt, interpretiert der C-Parser sie mehrdeutig entweder als Funktionsdeklaration oder als Funktionsaufruf mit einer leeren Argumentliste. Diese Mehrdeutigkeit führt oft zu Verwirrung und unerwarteten Ergebnissen.

Korrigieren des Codes

Um den Konstruktor aufzurufen und ein Objekt zu erstellen, sollte der Code aktualisiert werden auf:

#include <iostream>
using namespace std;

class Class {
    Class() {
        cout << "default constructor called";
    }

    ~Class() {
        cout << "destructor called";
    }
};

int main() {
    Class object; // Correctly invokes the constructor
}
Nach dem Login kopieren

Führen Sie den korrigierten Code aus, um die erwartete Ausgabe zu beobachten:

default constructor called
destructor called
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erstellt „Class object();' kein C-Objekt?. 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