CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Reference constante en argument (c++)

psitk
psitk
Niveau 4
25 juillet 2017 à 23:46:47

Bonjour , bonsoir :noel:

Quelle est l'utilité d'avoir en argument une référence constante , je croyais que l'utilité d'avoir une référence en argument dans une fonction servait à modifier la valeur de la variable passée en argument du coup j'suis un peu perdu . Par exemple , lorsque l'on redefini le constructeur de copie , il doit avoir en argument une referrence constante de l'objet , pourquoi ne pas passer directement l'objet en argument ? :hap:

whiteapplex
whiteapplex
Niveau 31
26 juillet 2017 à 02:14:17

C'est une question de conception:
- Est-ce que tu veux transmettre l'objet par copie ?
Non:
- Est-ce que tu as besoin de le manipuler comme pointeur ?
Non:
- Est-ce que tu dois le modifier ?
Non : Référence constante

Donc pour ta question, on ne passe pas directement l'objet parce qu'on n'a pas envie de le copier, et on n'a pas besoin de manipuler un pointeur de cet objet dans un constructeur par copie

Message édité le 26 juillet 2017 à 02:14:43 par whiteapplex
psitk
psitk
Niveau 4
26 juillet 2017 à 02:34:50

Ok merci ,donc quand on doit passer des choses lourdes en arguments comme des objets sans les modifier on privilégie la référence constante . Pendant que je cherchais la réponse à la question que tu viens de répondre , je me suis posé plein d'autres question : Mais ça fonctionne comment une referrence ? ça prend l'adresse d'un truc à son initialisation et ensuite ça permet d'accéder à la valeur de cette adresse ? Du coup pour un objet comment ça marche , un objet à une adresse ? comment sont gérés les objets/attributs/méthodes dans la mémoire ? :noel: , j'ai pour l'instant rien trouver de précis sur ce sujet , faut dire que je fais mes recherches en français :hap: .

whiteapplex
whiteapplex
Niveau 31
26 juillet 2017 à 11:44:54

Le 26 juillet 2017 à 02:34:50 psitk a écrit :
Ok merci ,donc quand on doit passer des choses lourdes en arguments comme des objets sans les modifier on privilégie la référence constante . Pendant que je cherchais la réponse à la question que tu viens de répondre , je me suis posé plein d'autres question : Mais ça fonctionne comment une referrence ? ça prend l'adresse d'un truc à son initialisation et ensuite ça permet d'accéder à la valeur de cette adresse ? Du coup pour un objet comment ça marche , un objet à une adresse ? comment sont gérés les objets/attributs/méthodes dans la mémoire ? :noel: , j'ai pour l'instant rien trouver de précis sur ce sujet , faut dire que je fais mes recherches en français :hap: .

"Lourde" ça veut surtout dire "tous les objets", une copie de 8 octets qui sert à rien est autant à éviter qu'une copie de 500 ko.
J'ai rapidement lu sur stackoverflow que les références ont pas d'implémentation officielle (en gros les compilateurs font comme ils veulent) mais qu'elles sont généralement gérées comme des pointeurs.
Si tu suis un cours sérieux ils t'expliqueront comment sont gérés les objets dans la mémoire, ou tu peux faire des recherches en anglais, en général ça fonctionne comme un struct et si on se complique pas la vie on peut visualiser chaque membre comme étant mis à la suite (si ça t'amuse tu peux regarder les addresses mémoires des membres d'une classe:
class A { public: int a; int b; int c }; void main(){ A a; cout << &(a.a) << " " << &(a.b) << " " << &(a.c) << endl; }
)

Tacha-tepoilu
Tacha-tepoilu
Niveau 12
26 juillet 2017 à 11:48:27

Si tu veux plus d'infos sur la mémoire il vaut mieux te mettre au C, il y a des notions qui devront être abordés avant de commencer à parler des références (comme les pointeurs et le fonctionnement de la mémoire)

[denshaotoko]
[denshaotoko]
Niveau 25
31 juillet 2017 à 00:35:21

"Lourde" ça veut surtout dire "tous les objets", une copie de 8 octets qui sert à rien est autant à éviter qu'une copie de 500 ko.

perso pour du int float double etc que je modifie pas, j'envoie toujours par copie plutot que de payer une copie d'adresse d'a peu pres meme taille de la vraie valeur, suivie de plusieurs dereferencage dans le corps de la fonction

ZemmourGenie
ZemmourGenie
Niveau 7
04 août 2017 à 09:42:15

Le 31 juillet 2017 à 00:35:21 [DenshaOtoko] a écrit :

"Lourde" ça veut surtout dire "tous les objets", une copie de 8 octets qui sert à rien est autant à éviter qu'une copie de 500 ko.

perso pour du int float double etc que je modifie pas, j'envoie toujours par copie plutot que de payer une copie d'adresse d'a peu pres meme taille de la vraie valeur, suivie de plusieurs dereferencage dans le corps de la fonction

c'est une mauvaise pratique même si elle n'a que peu d'influence
en C++ à mon que ce soit vraiment nécessaire tu passes tout par référence

Pseudo supprimé
Pseudo supprimé 04 août 2017 à 15:23:54

c'est une mauvaise pratique même si elle n'a que peu d'influence
en C++ à mon que ce soit vraiment nécessaire tu passes tout par référence

une référence c'est un pointeur "safe".
un pointeur c'est un long long.
donc pour les type primitifs qui sont moins grands que long long, une référence est inutile puisqu'elle a le même nombre d'octets voire plus qu'un type primitif.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment