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

Affichage des résultats du sondage: Position des opérateurs * et &

Votants
29. Vous ne pouvez pas participer à ce sondage.
  • int& integer;

    17 58,62%
  • int & integer;

    7 24,14%
  • int &integer;

    5 17,24%
C++ Discussion :

Vos préférences de position des opérateurs * et &


Sujet :

C++

  1. #21
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par skeud Voir le message
    "&" correspond à une manière de traiter une variable
    Je ne comprend pas trop ce que tu veux dire.

    Mais en appliquant ma méthodologie, ça devient plus simple.
    Il y a plus simple : on sait qu'il faut lire de "droite à gauche".
    Au pire, on test et le compilateur nous criera dessus (un "pointeur sur une référence" n'existe pas).

    HS. Par contre là où j'hésite toujours le temps c'est pour les pointeurs sur un tableau et tableau de pointeurs .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int * tab[] ; // tableau de pointeurs sur int
    int (* tab)[8] ; // pointeur sur un tableau de int
    int * (tab[]); // tableau de pointeurs sur int
    Ensuite concernant le const, je suis d'avis de le placer à droite de ce que l'on veut const. ça évite les confusion et donne des erreurs plus explicite:
    L'habitude:
    ne nous informe pas vraiment sur quoi est const, le pointeur ou les variable contenu dans le pointeur?

    Contrairement aux notations:
    qui indique que les int sont constant mais pas le pointeur
    Je ne suis pas du tout d'accord.

    Dans le premier cas const int *, const est proche de "int", je n'ai jamais vu un débutant avoir une confusion là-dessus.
    De même pour int * const, le const est proche de "*".

    Par contre, pour int const *, le const porte sur quoi? à droite ou à gauche ?
    Je ne suis pas sûr que si on pose la question, tout le monde répondra correctement, moi le premier .

  2. #22
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Par contre, pour int const *, le const porte sur quoi? à droite ou à gauche ?
    Le const porte sur int.
    Le standard indique que const s'applique sur ce qui est à gauche. La forme "const T" est un "abus de langage" qui est accepté par le standard.

  3. #23
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par skeud Voir le message
    Contrairement aux notations:
    qui indique que les int sont constant mais pas le pointeur
    Citation Envoyé par the Hound Voir le message
    Par contre, pour int const *, le const porte sur quoi? à droite ou à gauche ?
    Le const porte sur int.
    Le standard indique que const s'applique sur ce qui est à gauche. La forme "const T" est un "abus de langage" qui est accepté par le standard.
    C'était une question rhétorique, skeud ayant déjà donné la réponse avant que je ne poste.
    Le standard indique que le const s'applique sur ce qui est à gauche et à défaut sur ce qui est à droite.

    On ne peut pas vraiment dire que c'est un "abus de langage" car cela fait partie intégrante de la norme 89/90 et il me semble que les bibliothèques standards préfère la notation const int à int const.
    Pour être franc, je n'ai jamais vu quelqu'un écrire [codeinline]int const variable = 10;[codeinline].


    Pour en revenir au sujet originel, on trouve un peu de tout :
    • '*' collé au type dans le code source de la SFML ;
    • '*' entouré d'espaces sur cppreference ;
    • '*' collé au nom de variable pour la bibliothèque standard linux, pour Doxygen (regardé sur celui de la SFML), et un tutoriel d'un site concurrent.


    Mais je suis assez surpris par les résultats du sondage, il me semblait qu'on apprenait plutôt la seconde "forme" en IUT/école d'ingénieur.

  4. #24
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Je ne comprend pas trop ce que tu veux dire.
    Quand je dis que & est une manière de traiter la variable c'est de ce point de vue:

    ou
    Dans les deux cas on utilise une variable de type int* (jusque la on est d'accord).

    Par contre la manière d’utilisé cette variable change grâce au "&".

    Dans le premier cas: le compilo effectue une copie de la variable source.
    Dans le deuxième cas: le compilo nous envois la variable source.

    C'est pourquoi je fais une différence entre le "&" et les autre en disant que le "&" définis la manière d'utiliser une variable et ne définis pas le type d'une variable (même si ce point est discutable, tout dépend ce que l'on appelle "type" d'une variable) .

    De même pour le "const", pour moi c'est une manière d'utilisé la variable et non pas une définition de son type.

    [EDIT]La plupart des gens utilise const int car le compilo l'autorise, mais pourquoi?
    (je ne retrouve plus l'article)
    à la base, la notation était "int const" car le const portait principalement sur le type de gauche (surement des raisons pratique, mais je ne les connais pas). Sauf qu'en anglais, on dit: "constant integer", d'où un nombre de confusion énorme et nombre d'erreur de compilation. La fonctionnalité de pouvoir placé le const à gauche a été rajouté dans cette optique là .
    D'ailleurs si on traduit en français:
    nombre entier constant
    on retrouve bien la notation "int const"

    Mais si on part des choses qu'autorise le compilo, je pense qu'on a pas finis (accolade placé bizarrement, goto, etc ....).

    Pour finir, comme je le dis toujours, ce n'est pas parce que le compilo l'autorise qu'il faut forcément l'utiliser .[/EDIT].
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #25
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Pour être franc, je n'ai jamais vu quelqu'un écrire int const variable = 10;.
    Moi je le fais

    Sinon pour la définition du const, j'aime bien celle de la FAQ :
    La règle est que le const s'applique toujours sur ce qui le précède. S'il n'y a rien avant, alors on inverse sa position avec ce qui est juste après.
    Car elle explique clairement que par défaut const s'applique à ce qu'il y a devant (et le reste semble être un peu comme une exception).

  6. #26
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Neckara: ah d'accord c'était une façon de souligner le manque de cohésion/clarté dans le standard ...

    Citation Envoyé par skeud Voir le message
    Quand je dis que & est une manière de traiter la variable c'est de ce point de vue:

    ou
    Dans les deux cas on utilise une variable de type int* (jusque la on est d'accord).

    Par contre la manière d’utilisé cette variable change grâce au "&".

    Dans le premier cas: le compilo effectue une copie de la variable source.
    Dans le deuxième cas: le compilo nous envois la variable source.

    C'est pourquoi je fais une différence entre le "&" et les autre en disant que le "&" définis la manière d'utiliser une variable et ne définis pas le type d'une variable (même si ce point est discutable, tout dépend ce que l'on appelle "type" d'une variable) .

    De même pour le "const", pour moi c'est une manière d'utilisé la variable et non pas une définition de son type.
    C'est une manière de voir les choses ... pour moi ça ne fait que les compliquer.
    En effet, si tu déclares int& x; le compilo va gueuler parce qu'une référence non-initialisée c'est pas valide. x n'est donc pas un int mais bien un type référence sur int en tant que tel.
    Mais si on reste dans ta logique, alors il faut nécessairement différencier la référence passée en paramètre d'une fonction de la "variable référence". Puisque dans le premier cas, le "&" ne dénote qu'une "manière de faire", alors que dans le deuxième, c'est un attribut de type à part entière.

  7. #27
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par skeud Voir le message
    Par contre la manière d’utilisé cette variable change grâce au "&".

    Dans le premier cas: le compilo effectue une copie de la variable source.
    Dans le deuxième cas: le compilo nous envois la variable source.
    C'est un peu capillotracté
    Je préfère me dire que la référence est un "alias" sur une variable existante.

    De même pour le "const", pour moi c'est une manière d'utilisé la variable
    La fonctionnalité de pouvoir placé le const à gauche a été rajouté dans cette optique là .
    [...]
    Mais si on part des choses qu'autorise le compilo, je pense qu'on a pas finis (accolade placé bizarrement, goto, etc ....).
    Donc ils ont rajouté cela pour qu'on ne l'utilise pas ? .
    Du moment que tout le monde l'utilise de cette manière et qu'il n'y a pas d'ambiguïté, je ne vois pas l'intérêt de faire différemment à part pour embrouiller celui qui relit.

  8. #28
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    le const à gauche est très utile pour une variable locale, je trouve.
    Par contre, dans les arguments de fonctions, je le préfère à droite.

    Par exemple, j'écrirai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <typename T> T antinorme(T const& a, T const& b) {
        const T temp = a*b;
        return sqrt (temp) * temp;
    }
    ps: pardonne moi, ami physicien, je sais que ça n'a aucune validité.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #29
    Membre régulier
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 97
    Points
    97
    Par défaut
    Je trouve que la notation avec espaces des deux cotés est plus lisible, cepandant je trouve que l'autre notation a plus de sens.

    Quant à savoir vraiment laquelle est mieux... pour ma part, j'utilise les deux notations en fonctions de mon humeur généralement, en été j'utilise les deux espaces pour aérer le code parce que dans le sud ça chauffe, et en hiver je met cote à cote pour tenir chaud.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int * pi;
    int* pi;
    ou encore pour les réference (que je n'utilise uniquement pour les fonctions valeur de retour + arguments)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int & fct(const int &);
    int& fct(const int&);

Discussions similaires

  1. [web] [PerlTk] Position des fenêtres
    Par Cyspak dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 05/11/2004, 11h49
  2. [CrystalReports 8.5]Graphique 3D : position des étiquettes
    Par caubry dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 01/09/2004, 11h17
  3. DBGrid : enregister la position des colonnes
    Par Harry dans le forum Bases de données
    Réponses: 8
    Dernier message: 21/07/2004, 21h27
  4. Position des balises H2 ou comment les numéroter
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 12/07/2003, 19h24
  5. Changer dynamiquement la position des onglets
    Par ginnovy dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/09/2002, 18h24

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