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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    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 actif
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    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
    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 é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
    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

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