Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transmettre un classe a une fonction

Petite question

Sujet résolu
Anonyme
    13 août 2008 à 1:16:11

    Bonsoir.
    D'après le tuto de m@téo, on peux transmettre un classe dans une fonction en faisant un référence

    mafonction(monTypeDeClasse &maClasse)

    mais aussi tout simplement

    mafonction(monTypeDeClasse maClasse)

    Alors la une copie sera crée.
    Je voudrais savoir laquelle est a utiliser de préférence quand on est pas contraint d'utiliser une référence mais quand on a le choix des deux ? L'une d'entre elle est plus rapide ?

    Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2008 à 1:29:42

      Le mieux serait que tu nous montres ta fonction et ta classe.
      Par copie : nécessaire quand ta fonction va modifier l'objet alors que l'original doit rester tel quel. Plus lent car copie.
      Par référence : nécessaire si ta fonction doit modifier l'objet original. Rapide car pas de copie.
      Par référence constante : nécessaire si ta fonction va accéder aux propriété de l'objet mais ne le modifie pas. Rapide car pas de copie.
      • Partager sur Facebook
      • Partager sur Twitter
      FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
        13 août 2008 à 2:09:44

        Généralement, on procède par référence: non constante si on modifie l'objet, et constante si on ne la modifie pas. Ainsi, on évite la copie, qui est une opération plutôt gourmande en ressources (pire, certaines classes, comme ostream, sont incopiables, alors transmettre par copie causera une erreur de compilation).

        Seule exception: lorsqu'on passe un type primitif (int, char, bool, etc.) qu'on ne veut pas modifier, alors mieux vaut y aller par copie: les références ne nous apportent rien de plus.
        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2008 à 3:37:16

          Tout à fait.

          Je te renvoie à Boost.CallTraits ou bien à l'exemple que je donne dans mon article sur les classes de traits (http://alp.developpez.com/tutoriels/traitspolicies/#L1.2).
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            13 août 2008 à 10:38:32

            Merci beaucoup pour toutes vos réponses :)
            • Partager sur Facebook
            • Partager sur Twitter

            Transmettre un classe a une fonction

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown