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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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.

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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 Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    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

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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;)

  8. #8
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    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.

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