Il me semble que l'expression suivante est autorisée (même si elle a
un comportement indéfini) :
int x= x+1;
Y a-t-il une raison pour laquelle les auteurs de la norme n'ont pas
purement et simplement interdit cette écriture ? Accessoirement, y
a-t-il des cas (pas trop tordus) où elle peut être utile ?
Je crois que c'est Jean-Marc qui nous mets sur la piste de la solution: il s'agit peut-etre d'un constructeur (ce qui interdit la construction en deux temps), et il peut avoir besoin de l'adresse de la variable (pour modifier this).
Ca peut être une utilisation trouvée a postériori, mais la décision d'accepter cette construction date de bien avant la notion de constructeur.
Tout à fait. Mais que le C (et le C++ à sa suite) soit plein de mochettées historiques, nous en sommes bien d'accord.
Marc Boyer -- À vélo, prendre une rue à contre-sens est moins dangeureux que prendre un boulevard dans le sens légal. À qui la faute ?
Matthieu Moy <MatthieuNOSPAM.Moy@imag.fr.invalid> a écrit :
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
Je crois que c'est Jean-Marc qui nous mets sur la piste
de la solution: il s'agit peut-etre d'un constructeur
(ce qui interdit la construction en deux temps), et
il peut avoir besoin de l'adresse de la variable
(pour modifier this).
Ca peut être une utilisation trouvée a postériori, mais la décision
d'accepter cette construction date de bien avant la notion de
constructeur.
Tout à fait.
Mais que le C (et le C++ à sa suite) soit plein de mochettées
historiques, nous en sommes bien d'accord.
Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?
Je crois que c'est Jean-Marc qui nous mets sur la piste de la solution: il s'agit peut-etre d'un constructeur (ce qui interdit la construction en deux temps), et il peut avoir besoin de l'adresse de la variable (pour modifier this).
Ca peut être une utilisation trouvée a postériori, mais la décision d'accepter cette construction date de bien avant la notion de constructeur.
Tout à fait. Mais que le C (et le C++ à sa suite) soit plein de mochettées historiques, nous en sommes bien d'accord.
Marc Boyer -- À vélo, prendre une rue à contre-sens est moins dangeureux que prendre un boulevard dans le sens légal. À qui la faute ?
Matthieu Moy
Gabriel Dos Reis writes:
Nombreux langages ? Quels rapports ont-ils avec C++ ?
Le rapport, c'est que j'ai eu l'impression de passer pour un extra-terrestre quand j'ai proposé une solution simple pour interdire la construction casse gueule. Si je suis un extra-terrestre pour avoir proposé ça, il y a beaucoup d'autres extra-terrestres.
Le C++ doit-il selon toi être défini sans jamais s'inspirer de ce qui se fait dans d'autres langages ?
-- Matthieu
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
Nombreux langages ? Quels rapports ont-ils avec C++ ?
Le rapport, c'est que j'ai eu l'impression de passer pour un
extra-terrestre quand j'ai proposé une solution simple pour interdire
la construction casse gueule. Si je suis un extra-terrestre pour avoir
proposé ça, il y a beaucoup d'autres extra-terrestres.
Le C++ doit-il selon toi être défini sans jamais s'inspirer de ce qui
se fait dans d'autres langages ?
Nombreux langages ? Quels rapports ont-ils avec C++ ?
Le rapport, c'est que j'ai eu l'impression de passer pour un extra-terrestre quand j'ai proposé une solution simple pour interdire la construction casse gueule. Si je suis un extra-terrestre pour avoir proposé ça, il y a beaucoup d'autres extra-terrestres.
Le C++ doit-il selon toi être défini sans jamais s'inspirer de ce qui se fait dans d'autres langages ?
-- Matthieu
Matthieu Moy
Gabriel Dos Reis writes:
Et c'est un compilateur pour un langage largement utilisé dans la programmation système, je suppose.
D'ou vient cette supposition ?
-- Matthieu
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
Et c'est un compilateur pour un langage largement utilisé dans la
programmation système, je suppose.
Et c'est un compilateur pour un langage largement utilisé dans la programmation système, je suppose.
D'ou vient cette supposition ?
-- Matthieu
Marc Boyer
Gabriel Dos Reis a écrit :
Marc Boyer writes: | Le 03-10-2005, Matthieu Moy a écrit : | > Marc Boyer writes: | >> Après, dans le cas général, peut-il etre utile d'utiliser une | >> construction de la forme | >> int x= f(x); | >> ma réponse est 'je ne sais pas'. | > | > Vu le nombre d'utilisations potentielles (je ne me souviens pas avoir | > jamais eu besoin de ça, même si ma carrière de programmeur n'est | > encore pas très longue), et la difficulté de contourner (ecrire « int | > x; x = f(x); »), si c'était moi qui devais choisir, je n'hésiterais | > pas longtemps. | | Je crois que c'est Jean-Marc qui nous mets sur la piste | de la solution: il s'agit peut-etre d'un constructeur | (ce qui interdit la construction en deux temps), et | il peut avoir besoin de l'adresse de la variable | (pour modifier this).
On ne peut pas modifier la valeur de this.
OK. J'ai cru que c'était ce que sous-entendait le post de Jean-Marc. Je m'a trompé.
Mais regarde l'exemple que j'ai posté.
J'ai vu :-)
Marc Boyer -- À vélo, prendre une rue à contre-sens est moins dangeureux que prendre un boulevard dans le sens légal. À qui la faute ?
Gabriel Dos Reis <gdr@integrable-solutions.net> a écrit :
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
| Le 03-10-2005, Matthieu Moy <MatthieuNOSPAM.Moy@imag.fr.invalid> a écrit :
| > Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
| >> Après, dans le cas général, peut-il etre utile d'utiliser une
| >> construction de la forme
| >> int x= f(x);
| >> ma réponse est 'je ne sais pas'.
| >
| > Vu le nombre d'utilisations potentielles (je ne me souviens pas avoir
| > jamais eu besoin de ça, même si ma carrière de programmeur n'est
| > encore pas très longue), et la difficulté de contourner (ecrire « int
| > x; x = f(x); »), si c'était moi qui devais choisir, je n'hésiterais
| > pas longtemps.
|
| Je crois que c'est Jean-Marc qui nous mets sur la piste
| de la solution: il s'agit peut-etre d'un constructeur
| (ce qui interdit la construction en deux temps), et
| il peut avoir besoin de l'adresse de la variable
| (pour modifier this).
On ne peut pas modifier la valeur de this.
OK. J'ai cru que c'était ce que sous-entendait le post de
Jean-Marc. Je m'a trompé.
Mais regarde l'exemple que j'ai posté.
J'ai vu :-)
Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?
Marc Boyer writes: | Le 03-10-2005, Matthieu Moy a écrit : | > Marc Boyer writes: | >> Après, dans le cas général, peut-il etre utile d'utiliser une | >> construction de la forme | >> int x= f(x); | >> ma réponse est 'je ne sais pas'. | > | > Vu le nombre d'utilisations potentielles (je ne me souviens pas avoir | > jamais eu besoin de ça, même si ma carrière de programmeur n'est | > encore pas très longue), et la difficulté de contourner (ecrire « int | > x; x = f(x); »), si c'était moi qui devais choisir, je n'hésiterais | > pas longtemps. | | Je crois que c'est Jean-Marc qui nous mets sur la piste | de la solution: il s'agit peut-etre d'un constructeur | (ce qui interdit la construction en deux temps), et | il peut avoir besoin de l'adresse de la variable | (pour modifier this).
On ne peut pas modifier la valeur de this.
OK. J'ai cru que c'était ce que sous-entendait le post de Jean-Marc. Je m'a trompé.
Mais regarde l'exemple que j'ai posté.
J'ai vu :-)
Marc Boyer -- À vélo, prendre une rue à contre-sens est moins dangeureux que prendre un boulevard dans le sens légal. À qui la faute ?
Mais alors, comment font les programmeurs Pascal, Java, Ada, pour faire des listes circulaires ?
Je connais pas Java.
Si j'ai bonne memoire (ce qui n'est pas certain, sans compter qu'il y a des variantes de Pascal), en Pascal il n'est pas possible d'initialiser dans les declarations. Le probleme ne se pose donc pas.
En Ada, il y a a coup sur moyen avec des types controlles d'avoir l'equivalent; et j'ai le vague souvenir qu'il y avait moyen aussi avec l'initialisation par defaut.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais alors, comment font les programmeurs Pascal, Java, Ada, pour
faire des listes circulaires ?
Je connais pas Java.
Si j'ai bonne memoire (ce qui n'est pas certain, sans compter qu'il y
a des variantes de Pascal), en Pascal il n'est pas possible
d'initialiser dans les declarations. Le probleme ne se pose donc pas.
En Ada, il y a a coup sur moyen avec des types controlles d'avoir
l'equivalent; et j'ai le vague souvenir qu'il y avait moyen aussi avec
l'initialisation par defaut.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais alors, comment font les programmeurs Pascal, Java, Ada, pour faire des listes circulaires ?
Je connais pas Java.
Si j'ai bonne memoire (ce qui n'est pas certain, sans compter qu'il y a des variantes de Pascal), en Pascal il n'est pas possible d'initialiser dans les declarations. Le probleme ne se pose donc pas.
En Ada, il y a a coup sur moyen avec des types controlles d'avoir l'equivalent; et j'ai le vague souvenir qu'il y avait moyen aussi avec l'initialisation par defaut.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Gabriel Dos Reis
Matthieu Moy writes:
| Gabriel Dos Reis writes: | | > Nombreux langages ? Quels rapports ont-ils avec C++ ? | | Le rapport, c'est que j'ai eu l'impression de passer pour un | extra-terrestre quand j'ai proposé une solution simple pour interdire | la construction casse gueule. Si je suis un extra-terrestre pour avoir | proposé ça, il y a beaucoup d'autres extra-terrestres.
Je dirais pas « extra-terrestre », juste quelqu'un qui n'a pas l'air de comprendre l'étendu de la choses et les différentes intéractions. Marc a montré un exemple que je trouve tout à fait à point -- ne pas oublier la compilation séparée par exemple.
| Le C++ doit-il selon toi être défini sans jamais s'inspirer de ce qui | se fait dans d'autres langages ?
Le C++ s'inspire de la pratique existante d'autres langages. Et c'est une bonne chose. Mais je crois que l'on doit se garder de genéraliser les perceptions reçues d'une solution à un exercice de classe au contexte de C++ en oubliant d'autres contraintes et les intéractions entre les différents apects du langage. Les exercices académiques ont ceci de plaisant et remarquable qu'ils ont tendance à ignorer la réalité et travailler sur des problèmes *idéaux*. Ils doivent être tenus en compte, mais proprement placés dans leurs contextes.
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > Nombreux langages ? Quels rapports ont-ils avec C++ ?
|
| Le rapport, c'est que j'ai eu l'impression de passer pour un
| extra-terrestre quand j'ai proposé une solution simple pour interdire
| la construction casse gueule. Si je suis un extra-terrestre pour avoir
| proposé ça, il y a beaucoup d'autres extra-terrestres.
Je dirais pas « extra-terrestre », juste quelqu'un qui n'a pas l'air
de comprendre l'étendu de la choses et les différentes
intéractions. Marc a montré un exemple que je trouve tout à fait à
point -- ne pas oublier la compilation séparée par exemple.
| Le C++ doit-il selon toi être défini sans jamais s'inspirer de ce qui
| se fait dans d'autres langages ?
Le C++ s'inspire de la pratique existante d'autres langages. Et c'est
une bonne chose. Mais je crois que l'on doit se garder de genéraliser
les perceptions reçues d'une solution à un exercice de classe au
contexte de C++ en oubliant d'autres contraintes et les intéractions
entre les différents apects du langage. Les exercices académiques ont
ceci de plaisant et remarquable qu'ils ont tendance à ignorer la
réalité et travailler sur des problèmes *idéaux*. Ils doivent être
tenus en compte, mais proprement placés dans leurs contextes.
| Gabriel Dos Reis writes: | | > Nombreux langages ? Quels rapports ont-ils avec C++ ? | | Le rapport, c'est que j'ai eu l'impression de passer pour un | extra-terrestre quand j'ai proposé une solution simple pour interdire | la construction casse gueule. Si je suis un extra-terrestre pour avoir | proposé ça, il y a beaucoup d'autres extra-terrestres.
Je dirais pas « extra-terrestre », juste quelqu'un qui n'a pas l'air de comprendre l'étendu de la choses et les différentes intéractions. Marc a montré un exemple que je trouve tout à fait à point -- ne pas oublier la compilation séparée par exemple.
| Le C++ doit-il selon toi être défini sans jamais s'inspirer de ce qui | se fait dans d'autres langages ?
Le C++ s'inspire de la pratique existante d'autres langages. Et c'est une bonne chose. Mais je crois que l'on doit se garder de genéraliser les perceptions reçues d'une solution à un exercice de classe au contexte de C++ en oubliant d'autres contraintes et les intéractions entre les différents apects du langage. Les exercices académiques ont ceci de plaisant et remarquable qu'ils ont tendance à ignorer la réalité et travailler sur des problèmes *idéaux*. Ils doivent être tenus en compte, mais proprement placés dans leurs contextes.
-- Gaby
Gabriel Dos Reis
Matthieu Moy writes:
| Gabriel Dos Reis writes: | | > Et c'est un compilateur pour un langage largement utilisé dans la | > programmation système, je suppose. | | D'ou vient cette supposition ?
Ce n'est qu'une supposition. Mais si prenses qu'elle est vraie, c'est bien. Si tu penses qu'elle est fausse parce que c'est un langage jouet c'est bien aussi . Mais ma nature curieuse aimerait savoir.
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > Et c'est un compilateur pour un langage largement utilisé dans la
| > programmation système, je suppose.
|
| D'ou vient cette supposition ?
Ce n'est qu'une supposition. Mais si prenses qu'elle est vraie, c'est
bien. Si tu penses qu'elle est fausse parce que c'est un langage jouet
c'est bien aussi . Mais ma nature curieuse aimerait savoir.
| Gabriel Dos Reis writes: | | > Et c'est un compilateur pour un langage largement utilisé dans la | > programmation système, je suppose. | | D'ou vient cette supposition ?
Ce n'est qu'une supposition. Mais si prenses qu'elle est vraie, c'est bien. Si tu penses qu'elle est fausse parce que c'est un langage jouet c'est bien aussi . Mais ma nature curieuse aimerait savoir.
-- Gaby
Gabriel Dos Reis
Matthieu Moy writes:
| Gabriel Dos Reis writes: | | > struct circular_buffer { | > circular_buffer* next; | > circular_buffer(circular_buffer& c) : next(&c) { } | > // ... | > }; | > | > circular_buffer buffer = buffer; | | Mais alors, comment font les programmeurs Pascal, Java, Ada, pour | faire des listes circulaires ?
Pourquoi ne leur demandes-tu pas ? Mon petit doigt me dit que tu aurais plus de réponses si tu poses la question dans les groupes idiones.