"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 > Les membres de données de classe peuvent-ils être initialisés directement en C++ ?

Les membres de données de classe peuvent-ils être initialisés directement en C++ ?

Publié le 2024-11-18
Parcourir:275

Can Class Data Members Be Initialized Directly in C  ?

Les membres de données de classe peuvent-ils être directement initialisés ?

En C , les membres de données de classe ne peuvent pas être initialisés à l'aide de la syntaxe d'initialisation directe (), comme le montre l'exemple suivant :

#include 

class test {
public:
    void fun() {
        int a(3);
        std::cout 

La compilation échoue avec des erreurs :

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

Pourquoi est-ce le cas ?

La norme C interdit explicitement cette syntaxe pour initialisation des membres de données de classe. Les premières propositions pour l'introduction de la fonctionnalité citent des problèmes d'analyse comme raison.

Considérez cet exemple ambigu :

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};

La norme propose une solution :

Pour éliminer toute ambiguïté, la norme C autorise uniquement la syntaxe suivante pour l'initialisation des membres de données de classe :

  • = initializer-clause
  • { initializer-list }

Cette résolution garantit la clarté et évite tout risque de malentendu dans les cas où une déclaration pourrait ressembler à la fois à une déclaration d'objet et à une déclaration de fonction.

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