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 :

Retour par référence sur const


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut Retour par référence sur const
    Bonjour,

    J'ai une classe contenant un vector, et une méthode d'accès sur ce vector. Comme je veux éviter les accès en écriture sur mon vecteur, et éviter une copie (et éviter un pointeur ), je retourne par référence sur const. Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::vector<MonType>& get(void);
    Jusqu'ici tout va bien, la question concerne l'appel de ma méthode get(). Logiquement, je pense à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const std::vector<MonType>& v = mon_objet.get();
    Sauf que si j'omets de mettre const, ça marche également:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<MonType>& v = mon_objet.get();
    Je pense que sans const, il me crée un nouveau vector avec copie, et copie le contenu, alors qu'avec const j'ai bel et bien ma référence et donc un retour sans copie?
    Ca me semble évident mais je veux être sûr


    Edit: bon après un nouvel essai, la deuxième version ne marche pas. En fait c'est si on vire le const ET la référence, ou seulement la référence, que ça marche. Ca me semble déjà plus logique. Par contre, oublier la référence peut faire mal puisqu'on n'a aucune erreur de compilation, par contre ça nous coûte une copie.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ton code sans const ne devrait pas compiler.

    Sinon pour éviter de copier sans faire exprès, il suffit de ne pas introduire de nouvelles variables nommées, ce qui est bien souvent fait en excès chez les débutants.
    Boost ftw

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Tu veux dire quoi par "introduire de nouvelles variables nommées"? Utiliser mon_objet.get() plutôt que de déclarer une référence locale pour ensuite l'utiliser?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Oui.
    De toutes façons pour un vecteur constant, à part l'itérer, ce qu'on fait avec une boucle foreach(MonType v, mon_objet.get()), je vois pas trop ce que tu peux faire d'utile qui nécessiterait de passer par une variable intermédiaire.
    Boost ftw

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/07/2013, 14h36
  2. retour par référence et new
    Par ellosap dans le forum Débuter
    Réponses: 10
    Dernier message: 28/05/2010, 18h47
  3. Retour par référence d'un pointeur
    Par FunkyTech dans le forum C++
    Réponses: 16
    Dernier message: 22/07/2008, 13h56
  4. retour par référence de l'opérateur ++
    Par BigNic dans le forum C++
    Réponses: 4
    Dernier message: 02/08/2006, 18h35

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