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 :

Transmission d'une ref sur const dans une fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 45
    Par défaut Transmission d'une ref sur const dans une fonction
    Bonjour à tous,

    une petite question concernant la transmission d'arguments par référence dans les fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int f(const int& r)
    { }
    nécessite-il forcément que la variable transmise soit un int constant? Ou est ce juste une sémantique spéciale pour dire que la variable, bien que passée par ref ne sera pas modifiée?

    Merci

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    bonjour,

    le const n'est pas obligé, il s'agit juste d'un attribut sémantique qui dit à celui qui va utiliser: "tu peux être sûr que cette variable ne sera pas modifiée".


    Sinon quelques remarques:

    Dans le cas d'un type natif, le passage par référence constante ne change absolument rien au passage par valeur.

    On peut lire parfois que le passage par référence constante aide le compilateur à optimiser dans le cas d'un type complexe. C'est faux. Le compilateur ne peut pas optimiser à cause de l'existence du mot clé mutable.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 45
    Par défaut
    Mais on est bien d'accord que signifie : déclarer pour argument une référence vers un int constant ? Et non une référence constante (redondance )vers un int? N'est ce pas?

    A moins que le mécanisme de déclaration de variable et celui d'argument ne fonctionnent pas de la même façon...

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Oui c'est une référence sur constante. (et par abus de langage on parle de référence constante).
    le const s'applique toujours à ce qui le précéde sauf si il y'a rien avant il s'applique à ce qui est juste après.
    ie :
    const T& == T const &


    (beaucoup préfèrent la seconde écriture afin d'éviter ce genre d'ambiguïté.)

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 45
    Par défaut
    donc mettons que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int a=2;
    int b;
     
    int main()
    {
     
    b=g(a);
    return 1;
    }
     
    int g(const int& x)
    { }
    dans le premier appel je dis bien x pointe vers a qui n'est pourtant pas constant... et je devrais donc avoir une erreur non?

  6. #6
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Non, ce que ça veut dire c'est que dans la fonction tu ne pourras pas modifier x (et donc pas a, vu que x n'est qu'un alias pour a).

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  2. Réponses: 2
    Dernier message: 29/09/2009, 00h50
  3. Garder une ligne sur 5 dans une matrice
    Par benoitbs dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/12/2008, 13h38
  4. Réponses: 3
    Dernier message: 13/12/2007, 14h25
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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