Maison > développement back-end > C++ > 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 ?

Barbara Streisand
Libérer: 2024-11-15 02:14:02
original
458 Les gens l'ont consulté

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 <iostream>

class test {
public:
    void fun() {
        int a(3);
        std::cout << a << '\n';
    }
private:
    int s(3);    // Compiler error
};

int main() {
    test t;
    t.fun();
    return 0;
}
Copier après la connexion

La compilation échoue avec des erreurs :

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant
Copier après la connexion

Pourquoi est-ce le cas ?

Le standard C interdit explicitement cette syntaxe pour l'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;
};
Copier après la connexion

La norme propose une solution :

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

  • = 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.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal