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 :

Pouquoi & pour les références ?


Sujet :

C++

  1. #1
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut Pouquoi & pour les références ?
    Petite question académique qui m'intrigue (mais ne m'empèche pas de dormir):
    La déclaration des variables, parfois un peu ésotérique, obéit à une certaine logique. Par exemple exprime que *var a un type int donc en utilisant * avec son sens habituel de déréférencement d'une adresse, var est bien un type "adresse de int" . On peut associer * avec int ou avec var, le sens est le même.
    Je ne comprends pas la raison de la déclaration des références qui ne semble pas procéder de la même logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int var;
    int & rvar = var;
    La logique précédente appliquée ici donnerait pour &rvar (adresse de rvar) un type int alors qu'il s'agit d'un int * (qui est l'adresse de var). La logique précédente demanderait plutôt une déclaration
    Alors,
    &rvar serait bien un int *
    *& rvar équivalent à rvar (le contenu de l'adresse de x est x) serait bien un int.

    Connaissez vous la raison logique du choix qui a été opéré ou la syntaxe choisie l'a t'elle été pour une raison de simplicité (ou pour enlever les * qui font peur) ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il ne faut pas confondre l'opérateur & et le & de la déclaration d'une variable. L'opérateur & peut prendre l'adresse d'une variable, ou pas.
    Le int& var indique que var est en fait une représentation "locale" d'une variable déclarée autre part, en quelque sorte.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Miles : merci pour ta réponse.
    Il ne faut pas confondre l'opérateur & et le & de la déclaration d'une variable.
    Je comprends bien et fais la différence. La question qui m'intrigue est : Qu'est ce qui a amené à choisir & pour la définition des références plutôt qu'autre chose (§, @,>,<, ...) puisque, apparemment, le sens de & dans ce contexte n'est pas cohérent avec l'opérateur & "adresse de " (contrairement au cas de l'opérateur *et des types pointeurs) ? Les concepteurs avaient une idée derrière la tête, je suppose. Laquelle ?
    L'opérateur & peut prendre l'adresse d'une variable, ou pas
    je pense que & (en tant qu'opérateur (donc hors de la définition d'un "type" référence où il n'est pas opérateur) dans un contexte " adresse de" (naturellement pas en tant que opérateur AND bit à bit), ne peut pas prendre autre chose que l'adresse d'une variable.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Il n'y a rien de clair dans le D&E, mais l'exemple qui a fait introduire les références est la surcharge des opérateurs. Pour faire a = b + c avec des performances raisonnables sans réérences, on est obligé de demander à l'utilisateur d'écrire a = &b + &c en définissant l'opérateur plus pour prendre des pointeurs. D'où peut-être le signe &.

    Autre possibilité, il est dit dans ce livre que l'idée a été de reprendre le concept de langages existants, principalement en l'occurence Algol68 et dans une moindre mesure Simula. Il faudrait voir quelle syntaxe est utilisée dans ces langages.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par JolyLoic
    Autre possibilité, il est dit dans ce livre que l'idée a été de reprendre le concept de langages existants, principalement en l'occurence Algol68 et dans une moindre mesure Simula. Il faudrait voir quelle syntaxe est utilisée dans ces langages.
    Je ne connais pas Simula -- si j'ai bonne mémoire c'est basé sur Algol 60 --, mais Algol 68 n'utilise pas & (du moins dans sa syntaxe standard... Algol 68 est définit avec deux niveaux de langage et donc on pu imaginer une implémentation où "symbole repère de" dans le langage strict -- j'ai la traduction française du rapport -- à pour représentation &; les représentations suggérées dans le rapport en français sont ref et rep -- le souligné fait partie de la syntaxe également... ça intéresse quelqu'un mes radotages sur ce langage?)

    Je crois que & à été choisi parce que c'est en quelque sorte l'inverse de * et que les références sont en quelque sort l'inverse des pointeurs.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. [Toutes versions] Equivalent des dollars pour les références structurées
    Par NrokMTL dans le forum Excel
    Réponses: 0
    Dernier message: 10/04/2014, 21h19
  2. [XL-2007] Définir des références dynamiques pour les formules internes d'un tableau
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 10/05/2009, 13h05
  3. option de bibliographie pour afficher juste les références citées
    Par RO_student dans le forum Bibliographies - Index - Glossaires
    Réponses: 5
    Dernier message: 18/09/2008, 10h38
  4. Utilisation des références pour les tableaux
    Par Bouboubou dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 14/12/2005, 13h47

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