Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

operateur [] : distinguer lecture et affectation

2 réponses
Avatar
Dominique MICOLLET
Bonjour,

Suite à mon précédent article fort mal titré "Tableau en l_value ou r_value
pour mise à jour d'instance", Marc ESPIE m'a suggéré une excellente piste
puisque la connaissance des mots clefs idoines m'a permis de trouver sur
Internet :

http://www.cplusplus.com/forum/general/88839/

Le code proposé fonctionne très bien, et semble devoir faire ce que j'en
veux.
Par contre, je ne comprends pas comment il fonctionne.
À l'évidence, pendant, l'execution T[5] en ligne 39 fait appel à l'operateur
de la ligne 32, et T[5] de la ligne 36 fait appel à l'opérateur de la ligne
33.
Ma question est alors : pourquoi ?

Si quelqu'un peut éclairer ma lanterne (ou me rediriger vers une
explication) ...

Cordialement

Dominique

2 réponses

Avatar
Dominique MICOLLET
Rebonjour,

Dominique MICOLLET wrote:
À l'évidence, pendant, l'execution T[5] en ligne 39 fait appel à
l'operateur de la ligne 32, et T[5] de la ligne 36 fait appel à
l'opérateur de la ligne 33.
Ma question est alors : pourquoi ?


Je me réponds à moi même : il n'y a jamais d'appel à l'opérateur de la ligne
32.....

Cordialement

Dominique
Avatar
espie
In article <5391bfc4$0$2215$,
Dominique MICOLLET wrote:
Rebonjour,

Dominique MICOLLET wrote:
À l'évidence, pendant, l'execution T[5] en ligne 39 fait appel à
l'operateur de la ligne 32, et T[5] de la ligne 36 fait appel à
l'opérateur de la ligne 33.
Ma question est alors : pourquoi ?


Je me réponds à moi même : il n'y a jamais d'appel à l'opérateur de
la ligne
32.....




Ca ne se produit pas dans le cadre de l'exemple, mais si tu veux pouvoir
jouer avec un const test, il te faut un operateur const !

Ceci dit, ca ressemble a un exemple simplifie derive d'une classe template,
parce que la, dans ce cas precis, j'aurai plus tendance a prototyper
en

int operator[] (std::size_t i) const { return x[i]; }

(vu que ca ne coute "rien" de passer des int par valeur, alors que ca
peut etre payant sur un type T arbitraire)