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 :

inline + static


Sujet :

Langage C++

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut inline + static
    Bonjour,

    J'ai dans ma classe un compteur déclaré en static et je défini un accesseur sur cette varible

    Le code suivant marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class {
      static int compteur;
    ...
      static int getCompteur() {return compteur;}
    };
    Les méthodes définie dans le header d'une classe sont inline par défaut.

    On peut faire la même chose en définissant la méthodes "inline" dans le *.h mais hors de la classe.

    Mais le code suivant, ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class {
      static int compteur;
    ...
    };
    inline static int getCompteur() {return compteur;}
    J'ai l'impression que le compilateur me met une erreur car il ne sait pas distinguer que c'est une méthode static d'une méthode qui a un type de retour static.

    Quelqu'un à une solution, svp?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Une méthode n'a pas "un type de retour static".

    Ton code ne marche pas, car ta fonction ne fait pas partie de la classe, et tente d'accéder à la variable membre compteur sans préciser le nom de la classe devant (ensuite, il y a les questions de droit d'accès).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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
    Salut,
    Comme le dit Medinoc, static n'a pas à être reprécisé lors de la définition de la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class MaClasse{
      static int compteur;
      inline static int getCompteur();
    };
    int MaClasse::getCompteur() {return compteur;}
    Sache que le compilateur n'est pas obligé de suivre le mot clé 'inline' (sauf si tu le forces dans les options de compilation).

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Sache que le compilateur n'est pas obligé de suivre le mot clé 'inline' (sauf si tu le forces dans les options de compilation).
    Tu veux dire que le compilateur n'est pas obligé d'inliner l'appel à la fonction.
    Le mot-clé "inline" ne sert pas à ça, cependant. Il sert à permettre plusieurs définitions du même symbole dans plusieurs unités de traduction.

  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 loufoque Voir le message
    Tu veux dire que le compilateur n'est pas obligé d'inliner l'appel à la fonction.
    Le mot-clé "inline" ne sert pas à ça, cependant. Il sert à permettre plusieurs définitions du même symbole dans plusieurs unités de traduction.
    En général, il est présenté comme indiquant qu'il sert à inliner la fonction. D'où ma remarque.
    Merci pour la précision plus complète sur le sens exacte du mot clé inline

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Enfin si, c'est son utilité première, mais ça déclare également la fonction comme un symbole "faible".

  7. #7
    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
    Par symbole "faible", tu veux dire :
    Citation Envoyé par loufoque Voir le message
    Il sert à permettre plusieurs définitions du même symbole dans plusieurs unités de traduction.
    ?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    En clair, ce que microsoft appelle "static linkage".

    Traduction: [hors d'une classe] inline implique static par défaut.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    En clair, ce que microsoft appelle "static linkage".
    Pas du tout.
    Une fonction inline est extern, à moins de spécifiquer explicitement static.

    Par symbole "faible", tu veux dire :
    Ça veut dire que ça pose pas de problème d'avoir plusieurs définitions, elles sont toutes considérées équivalentes.

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Pas du tout.
    Une fonction inline est extern, à moins de spécifiquer explicitement static.
    En standard peut-être. Pas chez Microsoft, en tout cas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    La documentation de Visual C++ dit
    Functions that are declared as inline, and that are not class member functions, have internal linkage unless otherwise specified.
    Donc apparemment, les fonctions libres inline sont static par défaut, et les fonctions membres inline sont extern par défaut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. private static final String vs inline
    Par Reeter dans le forum Langage
    Réponses: 5
    Dernier message: 29/10/2008, 20h26
  2. [Langage] Méthode inline et variable static
    Par Cheps dans le forum Langage
    Réponses: 5
    Dernier message: 04/10/2008, 00h08
  3. probleme avec static inline
    Par deubelte dans le forum C++
    Réponses: 22
    Dernier message: 07/06/2008, 14h27
  4. Mise au point => static, inline et consorts
    Par progfou dans le forum C
    Réponses: 14
    Dernier message: 16/03/2006, 16h46
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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