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

C++ Discussion :

Comment bien définir une constante +INFINI en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Comment bien définir une constante +INFINI en c++
    Bonjour tout le monde,

    Je cherche à savoir comment je peux définir une constante +infini en C++.

    J'ai trouvé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const long INFINI = 10000000;
    ou bien passer par le #define
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define INFINI=10000000
    Ma question est quelle est la meilleure solution?
    Si c'est const long INFINI=... ou dois-je le mettre? dans le main? dans une classe "poubelle"? dans la classe qui en aura le plus besoin?

    Merci de vos éclaircissements.

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    http://www.cplusplus.com/reference/s...umeric_limits/

    Pour les entiers:
    std::numeric_limits<T>::max()

    Pour les réels
    std::numeric_limits<T>::infinity()

  3. #3
    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
    L'utilisation des fonctions de std::numeric_limits n'empêche pas la définition d'une constante ; tout dépend de ce que l'on veut faire.
    En plus, ça peut éviter d'appeler lesdites fonctions plusieurs fois.
    Bon ok, c'est de la micro-optimisation, et on risque de ne pas gagner grand chose...

    Citation Envoyé par touftouf57 Voir le message
    Ma question est quelle est la meilleure solution?
    Pour cette question, je ne suis pas un expert, mais je ne pense pas que ça a une grande importance.
    C'est encore un problème de micro-optimisation, et encore...
    D'un point de vue conceptuel, du moment que le tout reste cohérent, je pense qu'il n'y a pas de souci (à confirmer).

    Citation Envoyé par touftouf57 Voir le message
    Si c'est const long INFINI=... ou dois-je le mettre? dans le main? dans une classe "poubelle"? dans la classe qui en aura le plus besoin?
    A priori, je dirais dans un header, inclus partout où tu en as besoin...
    Mais faire un fichier juste pour une définition...
    Tu peux regrouper plusieurs définitions globales dans un même fichier, du moment qu'elles n'ont pas trop de dépendances.

    Sinon, à bien y réfléchir, l'endroit le plus approprié pour une déclaration globale me semble être le fichier principal.
    Et dans ce cas, ta constante doit être déclarée avec le mot-clé « extern » dans les autres unités de compilation.

    Si je ne m'abuse, il y a la macro « RAND_MAX », définie dans le header math.h (en C), qui donne le plus grand entier (int) codable.

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    numeric_limits renvoit une constante, le compilo fera la CSE tout seul.

  5. #5
    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
    Citation Envoyé par Joel F Voir le message
    le compilo fera la CSE tout seul.
    La quoi

  6. #6
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Steph_ng8 Voir le message
    La quoi
    Common Subexpression Elimination.
    Y a plus de cours de compil de nos jours ?

  7. #7
    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
    Citation Envoyé par Astraya Voir le message
    Une variable globale en C++ devrais être à proscrire, tout comme les macros
    Je vois...

    Citation Envoyé par Joel F Voir le message
    Y a plus de cours de compil de nos jours ?
    Si si, j'en ai eu.
    Quoi que ce n'était pas « compilation » l'intitulé du cours...
    Enfin, du « cours »...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En 16 bits ou en 32 bits la valeur la plus grande pour un long est
    2 147 483 647 la plus petite -2 147 483 648
    Moi, j'utilise MAXLONG défini dans <values.h>

  9. #9
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    +1 Joel

    Une variable globale en C++ devrais être à proscrire, tout comme les macros, encore utiliser car il subsiste un héritage culturel du C mais c'est pas forcement bon en C++...

    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
     
     
    //Pour tous
    template<class T>
    struct LIMITS
    {
    public:
         static const T INFINI;
    };
    template< class T>
    const T LIMITS<T>::INFINI = std::numeric_limits<T>::infinity();
     
     
    int main()
    {
        // LIMITS<long>::INFINI
    }
    Tu appels une fois la fonction, tu l'encapsules, tu utilises le standard! Quoi de plus beau? :p

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/01/2008, 19h13
  2. définir une constante en Perl
    Par djidane39 dans le forum Langage
    Réponses: 1
    Dernier message: 14/11/2007, 14h22
  3. relation avec le client - comment bien concevoir une appli
    Par ver_for dans le forum Modélisation
    Réponses: 2
    Dernier message: 08/05/2007, 12h35
  4. Réponses: 7
    Dernier message: 06/05/2006, 15h24
  5. [Secu] comment bien sécuriser une application
    Par orelero dans le forum Général Java
    Réponses: 4
    Dernier message: 26/04/2006, 12h50

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