IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez C++ Discussion :

[C++][FAQ] ajouter un exemple d'initialisation de tableau ?


Sujet :

Contribuez C++

  1. #1
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut [C++][FAQ] ajouter un exemple d'initialisation de tableau ?
    Suite à un sujet sur le forum, serait-il possible (car c'est une question que risquent de se poser beaucoup de monde) de rajouter une entrée dans la FAQ qui traite des données statiques concernant l'initialisation des tableaux, voir également de préciser la manière de définir une variable static const (préciser en somme que tant la dimension du tableau que le const doivent être reproduits à l'initialisation)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Tu veux bien les rédiger ?
    Je m'occupe de transmettre dès que tu les as postées

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Un premier jet, comme cela :
    concernant l'initialisation de static const:
    initialisation d'une variable static const
    Lorsque l'on souhaîte disposer d'une variable qui soit à la fois static et const, l'initialisation doit s'effectuer comme pour toute variable statique d'une classe (dans exactement un seul fichier d'implémentation) en précisant le mot clé const
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class MaClass
    {
        /* les fonctions et membres qui vont bien */
        private:
            static const int age;
    }
    sera implémenté sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const int MaClass::age=35;
    concernant l'initialisation d'un tableau de variables static
    initialisation d'un tableau de variables statiques
    Il arrive que l'on souhaite disposer d'un tableau de taille fixe de variables statiques.

    Lors de l'initialisation du tableau, qui doit comme toujours être effectuée dans exactement un seul fichier d'implémentation, il y a lieu d'indiquer clairement la taille de la variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class MaClass
    {
        /* ce qui va bien */
        private:
            static int lesnombres[4];
    }
    sera implémenté sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Maclass::lesnombres[4]={1, 2, 3, 4};
    Evidemment, je ne m'offusquerai pas si la tournure des phrases est modifiée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tant qu'on y est on peut parler des variables flottantes statiques, pointeurs statiques, références constantes volatiles templates statiques, ...

    Ici c'est strictement la même chose, ce qu'il faut plutôt faire comprendre aux personnes qui auraient le même problème que le membre qui a soulevé cette question, c'est que le mot-clé const et la taille du tableau font partie intégrante du type de la variable, et qu'il n'y a donc aucune raison de les omettre lors de sa définition. Ce serait la même chose pour une définition de variable globale par exemple.

    Par contre on peut très simplement donner plusieurs exemples variés de variables statiques dans le code de la FAQ, mais sans pour autant en faire une Q/R pour chaque cas.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Tu as tout à fait raison, c'est bien la raison pour laquelle j'ai précisé qu'il s'agissait d'un premier jet et que je ne m'offusque nullement si cela prend un autre forme...

    le problème est donc de manière plus générale de fournir une réponse "complète" sur "comment définir correctement la variable statique" et sur la forme à donner à cette réponse

    Il est vrai qu'une fois que l'on a cherché comment faire une variable static const, on s'en souvient... mais, bon, rafraîchir ses souvenirs est parfois utile
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Une proposition "premier jet" pour prendre en compte les remarques de Laurent:

    de l'initialisation correcte des variables statiques
    Lorsqu'il s'agit de déclarer une variable statique, il importe de l'initialiser dans exactement un fichier d'implémentation de la manière exacte utilisée dans la déclaration, à l'exception du mot cle static, et dans le respect des règles de définition des variables.

    Par exemple, les membres de la classe apparaissant sous les formes de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class LaClasse
    {
        /* les membres et fonctions "qui vont bien" */
        static const int unentier;
        static int tabentier[4];
     
    }
    doivent être respectivement initialisés sous les formes de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const int LaClasse::unentier=3;
    int LaClasse::tabentier={1, 2, 3, 4};
    (liste à compléter éventuellement )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    J'aimerais rajouter quelque chose.
    La définition de variable static const peut prendre une forme différente selon que le type est un type de base ou "n'importe quoi d'autre".
    Dans le cas d'un int, la définition suivante, plus pratique, est permise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class LaClasse {
        static const int unentier=3;
    }
    Ce n'est pas seulement plus court, ça permet aussi de résoudre les problèmes de dépendance statique (il faut croire que le compilo optimise ça comme si c'était une constante du précompilateur), j'ai déja été confronté plusieurs fois à ce problème et cette solution m'a été bien utile.
    Par contre, pour toutes les structures il faut utiliser la syntaxe complète, const ou pas.
    J'ajouterais que ça ne fonctionne pas avec les pointeurs (il est impossible de définir un pointeur constant) et que pour les tableaux je ne sais pas (à essayer).

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo