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

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

Susan Sarandon
Susan SarandonOriginal
2024-12-18 11:04:10715Durchsuche

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();

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;

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();

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
}

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

default constructor called
destructor called

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!

Stellungnahme:
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