56 votes

Est de retour void code valide?

J'ai découvert que le code suivant accepté par Visual C++ 2008 et GCC 4.3 compilateurs:

void foo()
{

}

void bar()
{
  return foo();
}

Je suis un peu surpris qu'il compile. Est-ce une fonctionnalité du langage ou est-ce un bug dans les compilateurs? Quel est le C/C++ normes de dire à ce sujet?

72voto

Cubbi Points 25339

C'est une fonctionnalité du langage C++

C++ (ISO 14882:2003) 6.6.3/3

Une instruction de retour avec une expression de type "cv vide" peut être utilisé uniquement dans des fonctions avec un type de retour de cv vide; l'expression est évaluée, juste avant la fonction de retour à son appelant.

C (ISO 9899:1999) 6.8.6.4/1

Une instruction de retour avec une expression ne doivent pas apparaître dans une fonction dont le type de retour est nulle.

51voto

zvrba Points 14028

Oui, c'est le code valide. C'est nécessaire quand vous avez modèle de fonctions de sorte que vous pouvez utiliser un code uniforme. Par exemple,

template<typename T, typename P>
T f(int x, P y)
{
  return g(x, y);
}

Maintenant, g peut être surchargé pour revenir caduque lorsque le deuxième argument est une type particulier. Si "le retour void" étaient invalides, à l'appel d' f serait alors pause.

Prograide.com

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.

Powered by:

X