"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi « Class object(); » ne crée-t-il pas un objet C++ ?

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

Publié le 2024-12-21
Parcourir:356

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 appelé, ce qui entraîne un comportement inattendu.

Le problème

La ligne problématique :

Class object();

n'appelle pas réellement 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 :

#include 
using namespace std;

class Class {
    Class() {
        cout 

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

default constructor called
destructor called
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3