Maison >développement back-end >C++ >Pourquoi « Class object(); » ne crée-t-il pas un objet C ?

Pourquoi « Class object(); » ne crée-t-il pas un objet C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-18 11:04:10716parcourir

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

Comprendre l'absence d'invocation de constructeur

En C, les constructeurs sont utilisés pour initialiser les objets d'une classe. Cependant, dans l'extrait de code fourni, le constructeur n'est pas invoqué, ce qui entraîne un comportement inattendu.

Le problème

La ligne problématique :

Class object();

ne fonctionne pas réellement invoquez le constructeur de la classe Class. Au lieu de cela, il déclare une fonction renvoyant un objet Class. Pour appeler correctement le constructeur et créer un objet, un point-virgule (;) doit être ajouté à la ligne :

Class object;

Dans les coulisses : l'analyse la plus vexante

L'extrait de code initial met en évidence un problème connu comme "l'analyse la plus frustrante" en C . Lorsqu'il rencontre la ligne :

Class object();

l'analyseur C l'interprète de manière ambiguë comme une déclaration de fonction ou un appel de fonction avec une liste d'arguments vide. Cette ambiguïté entraîne souvent de la confusion et des résultats inattendus.

Correction du code

Pour invoquer le constructeur et créer un objet, le code doit être mis à jour comme suit :

#include <iostream>
using namespace std;

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

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

int main() {
    Class object; // Correctly invokes the constructor
}

Exécutez le code corrigé pour observer le résultat attendu :

default constructor called
destructor called

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