• [^] # Re: Evite le C++

    Posté par . En réponse au journal C(++) ?. Évalué à -1.

    L'article raconte à peu prêt n'importe quoi.

    Ha ?
    Objectivement, j‘ai quand même l’impression que c’est toi qui raconte nawak...

    Le passage par valeur implique une copie dans des registres.

    Qu’est ce que les registres viennent foutre dans la définition de pass-by-value.
    Source ? Ou c’est une définition de derrière les fagots ?

    Java ne fait pas de copie à chaque appel de méthode sur un objet, et heureusement !
    si, Java fait une copie : il copie la référence.
    Il passe la référence par valeur. Il ne passe pas par référence. Nuance...

    Dans l‘exemple que tu cites, aDog est une référence sur un objet Dog (car Java manipule des références sur les objets, il est ainsi fait).
    Quand tu appelles la fonction foo, c’est bien une copie de aDog qui est envoyé, pas une référence sur aDog.
    J‘appelle foo(aDog), la fonction reçoit la valeur (une copie) de aDog => passage par valeur.

    En revanche en C++, si j’ai une fonction :

    void foo(Dog& d)
    

    Quand je l’appelle

    Dog aDog;
    foo(aDog);
    

    Je ne passe pas une copie de aDog, mais son adresse.
    J‘appelle foo(aDog), la fonction reçoit l’adresse de aDog => passage par référence.

    Que les valeurs que Java passe soit des références sur un truc ne change pas le fait que sémantiquement c’est un passage par valeur, pas un passage par référence comme il existe en C++ par exemple (j’appelle avec A, la fonction reçoit une référence sur A).