 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Vincent Lascaux Guest
|
Posted: Fri Apr 08, 2005 11:33 am Post subject: Re: recursivite terminale ou non. |
|
|
Follow up tp fr.comp.lang.c++
La question posée était de savoir quand un langage peut se permettre
d'éviter d'empiler les variables locales d'une fonction récursive en cas
d'appel terminal
| Quote: | Faut voir le langage compile. Rien qu'a cause du style d'ecriture
dans ces langages, un compilateur ML a plus de chances de l'avoir
qu'un compilateur C++ (pour lequel, en plus, pas mal de fonctions ne
seront pas eligibles a cause des destructeurs).
Par ailleurs, c'est quoi le problème des destructeurs auxquels il est fait
allusion ? Je ne vois pas en quoi ces derniers interagissent avec la
récursivité.
|
Il me semble que la norme oblige le destructeur de l'objet a être appelé
apres l'appel de la fonction récursive, donc l'appel n'est pas terminal s'il
y a des objets avec un destructeur non trivial dedans.
En particulier, un truc comme
struct A
{
A(int i) : i(i) { }
~A() { std::cout << i << " "; }
int i;
};
void foo(int n)
{
A tmp(n);
if(n>0)
foo(n-1);
}
int main()
{
foo(5);
}
Doit afficher 0 1 2 3 4 5 (et pas 5 4 3 2 1 0) (est-ce vraiment garanti par
la norme au fait ?)
--
Vincent
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Fri Apr 08, 2005 11:48 am Post subject: Re: recursivite terminale ou non. |
|
|
"Vincent Lascaux" <nospam (AT) nospam (DOT) org> writes:
| Quote: | Follow up tp fr.comp.lang.c++
|
Tu n'as fait que de mettre en copie, sans mettre de suivi; je le fais.
[...]
| Quote: | Faut voir le langage compile. Rien qu'a cause du style d'ecriture
dans ces langages, un compilateur ML a plus de chances de l'avoir
qu'un compilateur C++ (pour lequel, en plus, pas mal de fonctions ne
seront pas eligibles a cause des destructeurs).
Par ailleurs, c'est quoi le problème des destructeurs auxquels il est fait
allusion ? Je ne vois pas en quoi ces derniers interagissent avec la
récursivité.
Il me semble que la norme oblige le destructeur de l'objet a être
appelé apres l'appel de la fonction récursive, donc l'appel n'est
pas terminal s'il y a des objets avec un destructeur non trivial
dedans.
|
La formulation est manque de precision mais l'idee est la.
[...]
| Quote: | Doit afficher 0 1 2 3 4 5 (et pas 5 4 3 2 1 0) (est-ce vraiment garanti par
la norme au fait ?)
|
Oui.
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
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|