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

  8. #8
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    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
    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 confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    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
    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...

  11. #11
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    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 296
    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