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 :

Priorités des opérateurs


Sujet :

C++

  1. #1
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut Priorités des opérateurs
    Bonjour,

    je me pose des questions sur la priorité des opérateurs. Pour des nombres a,b,c,d le code
    est équivalent à
    car * est prioritaire sur +. J'ai deux questions simples à ce propos :

    1. est-ce toujours vrai si a,b,c,d sont des objets quelconques et * et + ont été surchargés?

    2. la norme précise-t-elle la priorité entre opérateurs identiques? Par exemple, la ligne
    correspond-elle à
    ou à
    Bien sûr je peux vérifier tout ceci avec mon compilateur préféré mais ma question est de savoir si tout ceci est normé ou si je risque d'avoir une mauvaise surprise en changeant de compilo.

    Merci à tous pour votre aide!

    EDIT : au passage, existe-il un document consultable gratuitement qui donne toutes les priorités entre opérateurs?

  2. #2
    screetch
    Invité(e)
    Par défaut
    http://cppreference.com/wiki/languag...tor_precedence

    * est dans la catégorie "right to left" donc on a

  3. #3
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    =
    1. est-ce toujours vrai si a,b,c,d sont des objets quelconques et * et + ont été surchargés?
    Oui malheureusement on ne peut pas modifier la priorité des opérateurs. (ou heureusement... selon le point de vue :p)
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  4. #4
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Citation Envoyé par Goten Voir le message
    Oui malheureusement on ne peut pas modifier la priorité des opérateurs. (ou heureusement... selon le point de vue :p)
    Je suis assez perplexe sur le "malheureusement" anéfé

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Je suis assez perplexe sur le "malheureusement" anéfé
    De même que pour la surcharge des opérateurs (ainsi que d'autres fonctionnalités), ça dépend du point de vue :
    • Autoriser la redéfinition des priorités laisse la possibilité de le faire à mauvais escient et de rendre le comportement contre-intuitif.
    • Interdire cette redéfinition impose une priorité qui peut ne pas correspondre à la priorité attendue dans certains cas (je pense notamment à l'écriture de DSL).


    A partir de là, on a l'opposition "philosophique" classique : doit on interdire ce qui pourrait être mal utilisé (et se débrouiller pour vivre avec ces restrictions) ou faire confiance à l'utilisateur et proposer tous les outils qui pourrait être utile dans quelques rares cas particuliers ?

  6. #6
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Je pense qu'il vaut mieux un cadre bien rigoureux que des libertés superflues ^^ (du moins en programmation )

  7. #7
    screetch
    Invité(e)
    Par défaut
    Mais la philosophie du C et du C++ est de ne pas avoir de contraintes fortes et en ce sens, ca va un peu contre cette philosophie (bien que je sois plus un supporter du "si c'est pas permis explicitement, alors c'est interdit")

    Mais en tous cas, c'est un outil impensable au niveau du parsing; cela signifie que durant le parsing il faudrait connaitre les priorités des opérateurs utilisateurs et les types des valeurs que l'on traite, ce serait très complexe (limite impossible).

  8. #8
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Oui c'est au programmeur d'être rigoureux, m'enfin il faut que le langage le soit un minimum quand même

  9. #9
    screetch
    Invité(e)
    Par défaut
    pas forcément, choisir le bon outil pour la bonne tâche si C# est plus rigoureux et plus pertinent pour un projet, tant mieux, si C++ est moins rigoureux mais qu'on a besoin de ces fonctionnalités supplémentaires...

    vu qu'il n'y a pas moyen de contenter tout le monde, je prône la différence entre les langages
    mais c'est vrai aussi que je passe mon temps a mettre des barrières pour que les autres programmeurs ne fassent pas trop de conneries...

  10. #10
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Oui enfin là je parle pas de la prog en général je parle dans un langage donné

  11. #11
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Merci à tous pour vos réponses, tout est clair maintenant!

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

Discussions similaires

  1. Priorité des opérateurs % et ++
    Par G3G3 dans le forum Débuter
    Réponses: 16
    Dernier message: 12/02/2008, 09h40
  2. [OCaml & F#] Priorité des opérateurs
    Par SpiceGuid dans le forum Caml
    Réponses: 7
    Dernier message: 01/01/2008, 15h00
  3. priorité des opérateurs
    Par new_wave dans le forum SQL
    Réponses: 13
    Dernier message: 08/11/2007, 21h44
  4. Priorité des opérateurs
    Par neuromencien dans le forum Langage
    Réponses: 3
    Dernier message: 14/05/2007, 17h06
  5. Réponses: 3
    Dernier message: 31/08/2006, 10h39

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