„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum erstellt „Class object();“ kein C++-Objekt?

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

Veröffentlicht am 21.12.2024
Durchsuche:209

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

ruft den Konstruktor für die Class-Klasse nicht tatsächlich 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 hebt ein Problem hervor, das als das „ärgerlichste Parsen“ in C bekannt ist. Wenn der C-Parser auf die Zeile:

Class object();

stößt, interpretiert er 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 
using namespace std;

class Class {
    Class() {
        cout 

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

default constructor called
destructor called
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3