2010-11-14 11 views
6

Possible Duplicate:
casting unused return values to voidC++ Quel est le but de lancer à vide?

J'ai lu le code source, et il beaucoup de fonctions virtuelles dans les classes d'interface sont déclarées et par défaut mises en œuvre en tant que telle:

virtual bool FunctionName(TypeName* pointer) 
{ 
    (void)pointer; 
    return true; 
} 

Puis-je demander quel est le but de jeter le pointeur annuler dans l'implémentation par défaut?

+2

Cela ne devrait pas compiler, car la fonction doit renvoyer une valeur. –

+1

Cela a été demandé autour de nombreuses fois. Envoyer quelque chose à 'void' indique que vous n'utilisez pas la valeur de retour. Dans votre cas, c'est un non-op. – zneak

+0

@zneak: 'pointer' n'est pas une valeur de retour. Pas dupe de cette question, même si je suis sûr que cela a déjà été abordé pour les paramètres. –

Répondre

18

fins multiples en fonction de ce que vous lancez

  • Marquer votre intention au compilateur une expression qui est tout à fait un non-op est conçu comme écrit (pour l'inhibition de mises en garde, par exemple)
  • Marquer votre intention pour le compilateur et le programmeur que le résultat de quelque chose est ignoré (le résultat d'un appel de fonction, par exemple)
  • Dans un modèle de fonction, si un type de retour est donné par un paramètre de modèle tapez T, et vous renvoyez le résultat d'un appel de fonction qui pourrait être différent de T dans certaines situations. Une explicite CAST pour T pourrait, dans le void cas, éviter une erreur de compilation:
    int f() { return 0; } void g() { return (void)f(); }
  • Inhiber le compilateur de choisir une surcharge d'opérateur virgule ((void)a, b ne sera jamais invoquer une fonction opérateur virgule surchargé).

Notez que les garanties standard qu'il n'y aura jamais un operator void() appelé si vous lancez un objet de classe void (certaines versions du CCG ignorent cette règle, cependant).

12

Dans ce cas, c'est juste pour éviter l'avertissement du compilateur sur les paramètres inutilisés.

+0

+1: pour donner la bonne réponse –

+0

Pourquoi faire un tel paramètre en premier lieu? – stackptr

+1

Le paramètre peut se produire car une autre classe qui implémente également cette fonction virtuelle utilise réellement ce paramètre. –