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. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 14
    Points
    14
    Par défaut Vos préférences de position des opérateurs * et &
    Bonjour, bonsoir, j'aimerais avoir vos avis concernant la position des opérateurs * et & en C++.

    J'utilise toujours : int& integer;

    J'ai remarqué aussi que dans "The C++ Programming language Fourth Edition" de Bjarne Stroustrup, Stroustrup écrit aussi int& integer.

    Est-ce une question de style ?

    Qu'en pensez-vous ?

  2. #2
    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
    Bonjour,

    Ce n'est pas la même utilisation.

    • un pointeur peut être nullptr, pas une référence ;
    • un pointeur peut changer de valeur, pas une référence qui référencera toujours le même objet ;


    On préférera souvent la référence au pointeur, il se comporte comme un "alias" et n'est pas toujours implémenté sous forme de pointeurs (optimisations du compilateur).
    Il évite aussi de devoir tester si le pointeur est nullptr ou non.

    Ensuite, pour les pointeurs, on préfère très souvent utiliser des containers (std::vector, std::map, etc.), des pointeurs intelligents (std::shared_ptr, std::unique_ptr, std::weak_ptr), voir même ne pas utiliser de pointeurs du tout.

  3. #3
    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
    Arf, je me suis fais avoir en lisant trop vite, j'ai loupé deux petits mots "la position" (je n'ai pas vu le sondage) .

    Donc moi j'utilise Type & variable.
    Je trouve que c'est un plus lisible que Type& variable.

    Par contre je déconseillerais Type &variable car cela n'a pas trop de sens à mes yeux de coller '&' au nom de la variable alors qu'il fait parti du type de la variable.

    C'est donc surtout une question de style.

  4. #4
    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
    Justement, & et * sont des marqueurs de la variable.

    c'est visible dans des codes comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int source = 2;
    int* a, b;
    int& one=source, two =source;
    Ici, a est un int*, b un int, one un int& (sur source), et two un int.

    Par contre, effectivement, pour déclarer une seule variable, je place la référence sur le type.

    Cela dit, la majorité des références sont des arguments de fonctions, et j'adopte le deux espaces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void swap( int & a, int & b);
    void export(int const& a, int const& b);

    Je préfère toujours l'étoile sur la variable à cause de cette grosse subtilité, qui veut que int* a, b; se lise "sont des int le pointé de la variable a, et la variable b"

    Ca m'évite des erreurs.
    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

  5. #5
    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 leternel Voir le message
    Justement, & et * sont des marqueurs de la variable.
    Ce que je veux dire c'est qu'on dit que ptr est un int *, on ne dit pas que c'est un int. De plus, '*' ne fait pas parti du nom de la variable, on parle de 'ptr', pas de '*ptr'.
    C'est pour cela que je sépare le nom de la variable du "type" par un espace.

    Citation Envoyé par leternel Voir le message
    c'est visible dans des codes comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int source = 2;
    int* a, b;
    int& one=source, two =source;
    Ici, a est un int*, b un int, one un int& (sur source), et two un int.
    Donc en effet, il vaudrait mieux éviter de coller '&' et '*' au "type" pour éviter la confusion.
    Même si on essaye généralement d'éviter de déclarer plusieurs variables sur la même ligne.

    Par contre, effectivement, pour déclarer une seule variable, je place la référence sur le type.
    Comme on ne change pas la méthode d'indentation au milieu d'un code, je ne pense pas qu'il soit judicieux d'utiliser les "trois méthodes" dans le code en fonction des circonstances.
    Ne vaut-il mieux pas en choisir une et s'y tenir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void swap( int & a, int & b);
    void export(int const& a, int const& b);
    Par contre, vous collez le & au const. Pourquoi?

  6. #6
    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 leternel Voir le message
    int const& a
    J'aime pas cette notation car ce qui est const est int, pas la référence (une référence "est toujours constante").

    Personnelement, j'utilise cette notation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    T &
    T const &
    char const * const
    Et m'interdit les déclarations sur la même ligne.

  7. #7
    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
    Je vais observer un peu mes codes, pour voir ce que je fais effectivement.
    Je mets toujours const& pour les arguments, probablement parce que dans ma 'tite tête, c'est une "référence-constante-en-un-seul-mot".

    Pour les déclarations, je n'ai quasiment jamais deux variables locales qui soient des pointeurs, et je ne déclare jamais un pointeur avec un pointé.
    (pas de int *a,b;)
    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

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Personnellement, j'utilise int * a, sauf pour:
    • Les pointeurs managés du C++/CLI, où j'utilise systématiquement String^ a
    • Les déclarations d'opérateurs retournant une référence, où j'utilise systématiquement MaClasse& operator=(.

    J'ignore si les déclarations de pointeur managé ont le même problème que les pointeurs ordinaires, mais je suppose que oui; j'évite d'en déclarer deux sur la même instruction dans tous les cas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    J'aime pas cette notation [...]

    Personnelement, j'utilise cette notation :
    Faudrait te mettre d'accord avec toi-même
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    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
    T const& est différent de T const &

    Edit : Je parle de coding style (présence ou pas d'un espace). Les deux sont des références sur membre constant.

  11. #11
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    T const& est différent de T const &
    J'espère que tu ne parles que de la coloration syntaxique ?
    Sinon, il n'y a aucune différence.

    En tout cas pour répondre à la question, je mets un espace avant et un espace après int & integer parce que j'aime bien quand mon code respire.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  12. #12
    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 Ehonn Voir le message
    T const& est différent de T const &
    Et (deux espaces) ça donne quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const T* == T const* == T const *
    T * const == T* const == T *const
    T const * != T * const
    C'est en CSS que les espaces ont une valeur autre que du simple bruit

  13. #13
    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 dragonjoker59 Voir le message
    J'espère que tu ne parles que de la coloration syntaxique ?
    Sinon, il n'y a aucune différence.
    Je parle de l'espace entre le const et la référence...
    et de coding style (les deux sont des références sur membre constant).

  14. #14
    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 Ehonn Voir le message
    Je parle de l'espace entre le const et la référence...
    Espace ou pas, c'est strictement la même chose.

    Edit: ok j'ai relu ton message après ton edit, j'ai pas vu que c'était une question de coding style.
    Mea culpa

  15. #15
    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
    Toute la discussion est autour du coding style : « Vos préférences de position des opérateurs * et & »
    J'ai quand même édité mon message pour lever toute ambiguïté.

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut ! Pas grand chose à ajouter, pour ma part, je me tiens à

    et de même pour les pointeurs, car je considère que ça fait partie du type.
    Find me on github

  17. #17
    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 jblecanard Voir le message
    Salut ! Pas grand chose à ajouter, pour ma part, je me tiens à

    et de même pour les pointeurs, car je considère que ça fait partie du type.
    En même temps vu le code d'exemple que tu as posté tu n'as pas d'autre choix que de le mettre sur le type (il n'y a pas de nom de variable)

    PS: troll hein

  18. #18
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Exact, mais vous avez compris Ce n'est pas sympa de t'avoir poucé rouge pour un message humoristique, j'ai l'impression qu'il y a des rageux en ce moment sur ce forum.
    Find me on github

  19. #19
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Salut,

    Pour ma part je le met coté type. Pour une raison que je trouve logique, on pointe/réfère un type donné (exception sur void*) via un nom de variable (adresse).
    Et puis après je dis toujours pointeur sur entier(int*) nommé toto (toto) donc j'écris comme je dis ( c'est profond ça ), ou pointeur sur entier(int*) membre(m) nommé toto(toto).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int* toto; //Pointeur sur entier toto
    long* mToto//Pointeur sur long membre toto
    Homer J. Simpson


  20. #20
    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
    Bonjour je viens donné mon avis sur la question aussi .

    Pour moi, "*" et "&" n'ont rien en commun (simple avis):
    _ "*" correspond au type d'une variable
    _ "&" correspond à une manière de traiter une variable

    ensuite concernant la typologie de déclaration des variable, j'utilise la suivante:
    "type" "utilisation" "nom";

    Et ceux afin d'éviter les casse-tête avec les * et les &. Par exemple, une référence sur un pointeur, ça devient vite le casse-tête pour savoir où placer correctement l'étoile et le "&". Pire encore si il s'agit d'une référence sur un tableau de pointeur etc .......
    Mais en appliquant ma méthodologie, ça devient plus simple.

    Référence sur pointeur d'entier nommé ptr.
    référence correspond à la manière d'utiliser la variable
    pointeur d'entier correspond au type de variable
    ptr correspond au nom de la variable
    Ce qui donne:
    ou
    (Personnellement, je préfère la première, car plus jolie à lire).
    De plus, en lecture rapide, on voit rapidement que l'on utilise une variable de type int*. La vue n'est pas parasité par le "&".

    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

    et

    Qui indique que le pointeur est constant mais pas les valeurs.

    Et enfin pour que tout soit constant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int const * const tableau
    Certes un peu trivial, mais bien explicite.

    M'enfin, tout ceci n'est que mon humble avis .
    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


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