C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: recursivite terminale ou non.

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Vincent Lascaux
Guest





PostPosted: Fri Apr 08, 2005 11:33 am    Post subject: Re: recursivite terminale ou non. Reply with quote



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





PostPosted: Fri Apr 08, 2005 11:48 am    Post subject: Re: recursivite terminale ou non. Reply with quote



"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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.