C++ la fonction de retour de la fonction

Où dans la norme sont des fonctions retournant des fonctions interdites? Je comprends qu'ils sont conceptuellement ridicule, mais il me semble que la grammaire leur permettrait. Selon cette page, un "noptr-déclaration [est] pour être valable, toute demande de déclaration", qui devrait inclure la déclaration d'une fonction:

int f()();

Qui concerne la syntaxe.

Il me semble que la syntaxe, comme énoncé dans [dcl.decl], permet

int f(char)(double)

qui pourrait être interprété comme la fonction f qui prend un char et retourne une fonction avec la même signature que int g(double).

1    declarator:
2       ptr-declarator
3       noptr-declarator parameters-and-qualifiers trailing-return-type
4    ptr-declarator:
5        noptr-declarator
6        ptr-operator ptr-declarator
7    noptr-declarator:
8        declarator-id attribute-specifier-seq opt
9        noptr-declarator parameters-and-qualifiers
10       noptr-declarator [ constant-expression opt ] attribute-specifier-seq opt
11       ( ptr-declarator )
12    parameters-and-qualifiers:
13       ( parameter-declaration-clause ) cv-qualifier-seqAfter

Grosso modo, après
1->2, 2=4, 4->6, 4->6
vous devriez avoir
ptr-opérateur ptr-opérateur ptr-opérateur
Ensuite, l'utilisation 4->5, 5=7, 7->8 pour la première demande de déclaration; l'utilisation 4->5, 5=7, 7->9 pour la deuxième et la troisième declarators.

  • C chemin - de retour void *, et de le jeter à la fonction 🙂 C++ moyen - retour référence ou un pointeur vers un objet qui a une fonction (modèle de stratégie)
  • C'est vraiment de très mauvais conseils. Même en C, vous pouvez retourner un pointeur de fonction. En C++, vous pouvez utiliser std::function, ou de tout objet appelable.
  • Linux' signal fonction est un exemple typique d'une fonction retournant une autre fonction (pointeur), et je ne pense pas que c'est ridiculus. La seule chose ridiculus est la syntaxe: void (*signal(int signo, void (*func )(int)))(int);
  • Qui n'a pas de retour d'une fonction. Elle renvoie un pointeur de fonction.
  • Bon, bien, maintenant vous êtes de faire la même erreur que Anzurio. L'OP n'a pas dit que le retour des pointeurs de fonction est ridicule. À tous.
  • Merde. Lire la question, comme si l'OP veut revenir pointeurs de fonction et non des fonctions.
  • Vous vous trompez en pensant que C++ est principalement défini par une grammaire. La grammaire ne signifie pas grand-chose (et est connu pour être extrêmement ambiguë pour le C++, c'est pourquoi le codage C++ analyseurs est ennuyeusement difficile, et donc, c'est la lecture de code C++!)
  • J'ai enfin downvoted la question, parce que c'est un mélange de grammaire et de définition de langage qui, pour le C++ en particulier (et, malheureusement, à mon humble avis) est très différent. C'est pourquoi le C++ est si difficile à lire, difficile à apprendre, difficile à analyser (tout cela à cause de l'héritage et l'arrière de look&feel compatibilité avec C raisons)
  • la grammaire et le langage de définition ont été secoué, pas remué. Alors, pourquoi est le mélange de mauvais?
  • Vous mentionnez que la grammaire serait de leur permettre, et vous avez raison; ce n'est pas la grammaire qui interdit cela. Mais j'ai bien compris votre question en vous demandant certains de la syntaxe de la règle de l'interdire (et il n'en existe pas, puisque c'est une sémantique de l'émission)
  • La question est "Où est dans la norme sont des fonctions retournant des fonctions interdites?" Il n'est pas qualifié en demandant une syntaxe spécifique à la règle.
  • la phrase suivante à la question est la fin de la "il me semble que la grammaire serait de leur permettre", et peut donc être compris (au moins par la non-anglophone que je suis) pourquoi la grammaire est rébarbatif que...
  • Il n'y a rien sur le plan conceptuel ridicule sur les fonctions de retour des fonctions. Il a fait tout le temps dans d'autres langues. il est même fait en C++ sous la forme de fonctions de renvoi de fermetures.
  • Double Possible de Fonction retournant une expression lambda

InformationsquelleAutor Hector | 2015-07-13