Bien sur, en Java ceci est comme indiqué une exception. Mais je te ferais remarquer au passage, que la façon de compiler en assembleur le resultat n'est pas vraiment définit avec précision dans les 1eres specs.
Ainsi, bcp l'on deja noté, entre javac (v6) et jikes (par exemple), il y a un légere différence. Pour en avoir le coeur net, decompile ton bytecode (en ayant prit soit de ne pas l'avoir obscurcit).
Lorsque je parlais de semantique cachée, je voulais dire que voir :
client << product + qte;
n'est pas forcement trés clair, et que lorsque tu as à voir bcp de code en revue (qui n'est generalement pas ton code), si tu dois avant de tenter de comporendre et maitriser la semantique des opérateurs sela ne simplifie ni ne rend rapide la compréhensio du code.
client.order(product,qte);
Dans le premier cas, non seulement se pose le PB de la semantique de '<<' et '+' mais également la question d'objet traditionel, à qui celà s'applique !
Pour quelqu'un qui s'est mit à l'objet sur le tard, cela semble bizzare, car il a vecu avec la notion de précédence omniprésente pour lire des choses du style :
(int *) f[] (CHAR *href ...)
Mais, est-ce que de telles choses sont vraiment si indispensable que cela ?
Si tu fais des claculs sientifiques toutes la journée, alors oui peut-être ... mais pour la majorité d'entre nous qui fait plutot de l'algorithmique, je n'en suis pas vraiment sur.
Enfin, je te rassures si tu veux faire de de la surcharge d'opérator va sur
http://minilien.com/?jF4qfYTgy8 et fait ton choix ;-)
Je te propose de joindre le debat sur la JCP, et de proposer tes idées. On sais jamais peut-etre feras-tu.penser la balance ...
[^] # Pas si simple ...
Posté par Hive Arc . En réponse à la dépêche Java Virtual Machine 1.4.2 beta. Évalué à 5.