Je veux dire
int main(){
void a(){
//code
}
a();
}
AFAIS: les classes et les structures imbriquées sont la solution la plus courante ...
Je veux dire
int main(){
void a(){
//code
}
a();
}
AFAIS: les classes et les structures imbriquées sont la solution la plus courante ...
Non, C++ ne prend pas en charge.
Cela dit, vous pouvez avoir toutes les classes, et ils peuvent avoir des fonctions (non-static
ou static
), de sorte que vous pouvez obtenir ce à un certain degré, mais c'est un peu une bidouille:
int main() // it's int, dammit!
{
struct X { // struct's as good as class
static void a()
{
}
};
X::a();
return 0;
}
Cependant, j'aurais de la question de la praxis. Tout le monde sait (bien, maintenant que vous faites, de toute façon, :)
) C++ ne prend pas en charge les fonctions locales, de sorte qu'ils sont utilisés pour ne pas en avoir. Ils ne sont pas utilisés, cependant, pour que la bidouille. Je voudrais passer un bon moment sur ce code pour s'assurer qu'il est vraiment là que pour permettre à des fonctions locales. Pas bonne.
Les classes locales ont déjà été mentionnées, mais voici un moyen de les laisser apparaître encore plus comme des fonctions locales, en utilisant une surcharge operator () et une classe anonyme:
int main() {
struct {
unsigned int operator() (unsigned int val) const {
return val<=1 ? 1 : val*(*this)(val-1);
}
} fac;
std::cout << fac(5) << '\n';
}
Je ne conseille pas sur l'utilisation de ceci, c'est juste une astuce amusante (peut faire, mais à mon humble avis ne devrait pas).
Avec la montée en puissance de C ++ 11 il y a quelque temps, vous pouvez maintenant avoir des fonctions locales dont la syntaxe rappelle un peu JavaScript:
auto fac = [] (unsigned int val) {
return val*42;
};
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.