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
413 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!

source:php.cn
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