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 :

static const, namespace ou #define ?


Sujet :

Langage C++

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Points : 90
    Points
    90
    Par défaut static const, namespace ou #define ?
    Bonjour,

    J'ai un problème mineur. je suis entrain de faire une classe Maths ayant plein de constantes (PI en float, PI/2 en float, PI en double, PI/2 en double etc).

    Mais l'ennuie c'est que je ne voudrai pas que les constantes crées soient dans mon fichier binaire. Oui je gagnerais une cinquantaine d'octet mais j'y tiens. :]
    Je ne voudrais pas avoir recours au #define tout simplement parce que je souhaiterais appeler la constante avec "Math::MyValue".

    Est-ce qu'un bête "inline static const float MyValue = 3.14f" fonctionne ?
    Ou encore mettre mes valeurs dans un namespace "Math" ?

    Merci.

  2. #2
    screetch
    Invité(e)
    Par défaut
    tant que tu ne prends pas l'addresse d'une variable, un static const float ne prend pas de place (s'il est dans un header. s'il est dans un cpp alors le linker doit avoir son adresse).
    il est possible que tu doives le mettre dans un namespace cependant (je sais pas si c'est legal de definir un static const float lors de la declaration)
    sinn le plus simple: tester, compiler les deux versions

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Points : 90
    Points
    90
    Par défaut
    Je note ça. Merci beaucoup !

    Je vais faire des testes plus tard et je posterai les résultats ici.

  4. #4
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut

    Citation Envoyé par screetch Voir le message
    (s'il est dans un header. s'il est dans un cpp alors le linker doit avoir son adresse).
    Je ne sais pas ce que tu entends par là. Mais si l'adresse n'est jamais explicitement prise et en mode release le linker nettoyant les symboles non référencés, les static const ne devraient pas se retrouver dans l'exécutable final. En tout état de cause, à vérifier.

  5. #5
    screetch
    Invité(e)
    Par défaut
    Je voulais dire: si la variable est dans un fichier cppet référencée dans un autre fichier cpp alors le linker devra sans doute l'ajouter dans l'exécutable
    Si la constante est dans un fichier header alors elle sera éliminée.

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Mais ce comportement est-il défini dans la norme ?

  7. #7
    screetch
    Invité(e)
    Par défaut
    non, c'est l'implémentation des compilateurs.
    Dans la norme, rien n'est indiqué sur la taille des executables, de toutes facons, donc pas possible de la brandir comme preuve

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par screetch Voir le message
    non, c'est l'implémentation des compilateurs.
    Dans la norme, rien n'est indiqué sur la taille des executables, de toutes facons, donc pas possible de la brandir comme preuve
    La seule chose que la norme dit, c'est que dès lors qu'on prends l'adresse d'une constante, le compilateur doit le détecter et définir la zone mémoire où la valeur est stockée. Par contre, tant que tu ne prends pas son adresse, elle n'a pas besoin d'en avoir, et le compilateur a tout a fait le droit de ne pas stocker la constante.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Et vu le besoin que l'on a des adresses des constantes, je ne vois pas trop où est le problème.
    Elle sont généralement éliminées^Winlinées, où qu'elles se trouvent définies.
    Pour des infos plus précises, et justes surtout, je dirai de jeter un coup d'oeil au TR18015 sur les perfs (dispo sur le site du commité de standardisation). Les constantes y sont traitées dans mes souvenirs.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Tu peux aussi mettre les constantes sous forme hexadécimale avec un static const uint32_t ou uint64_t, et du coup elles prendront 0 mémoire...
    Boost ftw

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Quel rapport avec l'hexa ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Différence entre #define et static const int
    Par memoire.ph dans le forum Débuter
    Réponses: 6
    Dernier message: 02/04/2012, 01h05
  2. Réponses: 2
    Dernier message: 30/10/2006, 16h40
  3. Réponses: 1
    Dernier message: 23/09/2006, 00h41
  4. problème avec const char * et #define macro
    Par CodeurNé dans le forum C
    Réponses: 5
    Dernier message: 20/09/2006, 21h25
  5. static const et taille de tableau
    Par tut dans le forum C++
    Réponses: 3
    Dernier message: 27/01/2005, 16h01

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