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

Langage C++ Discussion :

Variable statique locale à une fonction membre


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Variable statique locale à une fonction membre
    Hello,

    Je me demandais si on pouvait utiliser dans une fonction membre des variables locales statique, comme dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class A
    {
        void maFonction();
    };
     
    A::maFonction()
    {
        static int pouet = 0;
        std::cout << pouet++ << std::endl;
    }
     
    int main()
    {
        A monA;
     
        monA.maFonction();
        monA.maFonction();
        monA.maFonction();
        monA.maFonction();
    }
    et si oui, aurai-je bien comme résultat :

    ?

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Hello !
    Bah il suffit de tester, non ?

    Plus sérieusement, c'est possible (et ça fonctionne ! ).
    Par contre, de mémoire, la variable sera partagée entre toutes les instances.
    Ce qui paraît logique, vu qu'une variable statique n'est initialisée que lors de sa première utilisation...

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Oui, c'est tout à fait légal
    Citation Envoyé par Steph_ng8 Voir le message
    Par contre, de mémoire, la variable sera partagée entre toutes les instances.
    Ce qui paraît logique, vu qu'une variable statique n'est initialisée que lors de sa première utilisation...
    En fait, la variable sera partagée entre tous les appels de la fonctions, quelle que soit l'instance au départ de laquelle la fonction sera appelée...

    Cela peut s'avérer utile si l'on est sur que la variable doit toujours utiliser la meme valeur et qu'il s'avère couteux (en temps ou en ressources) de devoir la recréer ou la réinitialiser à chaque appel de la fonction.

    Par contre, même cachée au milieu d'une fonction membre d'une classe se trouvant peut etre dans un espace de noms, il faut garder en mémoire que l'utilisation de variables statiques reste toujours problématique du fait du linkage dont elles font l'objet.

    S'il n'y a rien qui interdit la manoeuvre, il s'agit quand meme d'avoir des raisons valables de travailler de la sorte
    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
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Oui, c'est tout à fait légal
    A la bonne heure. :-)

    Citation Envoyé par koala01 Voir le message
    Cela peut s'avérer utile si l'on est sur que la variable doit toujours utiliser la meme valeur et qu'il s'avère couteux (en temps ou en ressources) de devoir la recréer ou la réinitialiser à chaque appel de la fonction.
    C'est le cas.

    Citation Envoyé par koala01 Voir le message
    Par contre, même cachée au milieu d'une fonction membre d'une classe se trouvant peut etre dans un espace de noms, il faut garder en mémoire que l'utilisation de variables statiques reste toujours problématique du fait du linkage dont elles font l'objet.
    Je n'ai jamais été au clair, sur ces problèmes induits par les variables statiques.
    A chaque fois, je résous au cas par cas, mais je n'en ai pas encore tiré de règle générale.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par oodini Voir le message
    Je n'ai jamais été au clair, sur ces problèmes induits par les variables statiques.
    A chaque fois, je résous au cas par cas, mais je n'en ai pas encore tiré de règle générale.
    A éviter.


    (problème multithread, réentrance, fonction impure... Même 'locale' une variable statique souffre des mêmes tares qu'une variable globale)

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    (problème multithread, réentrance, fonction impure... Même 'locale' une variable statique souffre des mêmes tares qu'une variable globale)
    Effectivement, je sais que dans le cadre d'une utilisation en multithread, il faut les éviter comme la peste (ou du moins, en toute conscience).

    Je pensais plutôt aux problèmes d'édition de liens.

    PS : Qu'est qu'une fonction impure ? Je suppose que ça n'a rien à voir avec les virtuelles pures ?

Discussions similaires

  1. Variable static dans une fonction membre
    Par uriotcea dans le forum C++
    Réponses: 8
    Dernier message: 09/07/2009, 14h48
  2. Variable locale à une fonction.
    Par MoiRemi dans le forum PL/SQL
    Réponses: 7
    Dernier message: 04/02/2009, 17h05
  3. [NASM] Variables locales à une fonction
    Par Rémiz dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 13/11/2008, 10h33
  4. variable statique d'une fonction, locale à un thread?
    Par coyotte507 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 29/06/2007, 12h54
  5. Réponses: 14
    Dernier message: 05/09/2006, 01h17

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