• [^] # Re: Godbolt

    Posté par (site web personnel, Mastodon) . En réponse au journal Le quiz c++ de l'été. Évalué à 10.

    mais je ne connais aucun langage permettant facilement le choix entre copie/référence, const/mutable

    Tu ne fais pas d'effort, il suffit de se documenter sur Ada :)

    procedure test(A : in Integer) -- Passage par copie car tient sur un registre mais A est constant dans le corps
    procedure test(A : in BigObject) -- Passage par référence car trop gros mais toujours constant dans le corps
    procedure test(A : out Integer) -- La valeur initiale n'a pas d'importance mais là, c'est forcément un référence
    procedure test(A : in out Integer) -- Les deux cas précédents
    procedure test(A : in access BigObject) -- Là, on a clairement affaire à un pointeur qu'il faut déréférencer
    procedure test(A : in not null access BigObject) -- pareil mais on sait qu'il ne sera pas nul
    procedure test(A : in access constant BigObject) -- et celui-là, on ne peut pas modifier le pointé

    Je n'ai pas mis d'exemple mais lorsque l'on passe un objet issu d'un type taggué (en gros, un objet qui autorise la POO), celui-ci est forcément passé par référence.

    Pour les quelques curieux, voici les deux pages intéressantes sur le Wikibook, celle sur les passage de paramètres et celle des pointeurs.