Maison  >  Article  >  développement back-end  >  Pourquoi \"cout\" imprime-t-il \"1\" lorsqu'un pointeur de fonction est utilisé sans parenthèses ?

Pourquoi \"cout\" imprime-t-il \"1\" lorsqu'un pointeur de fonction est utilisé sans parenthèses ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 09:33:301004parcourir

Why Does

Pourquoi "cout une fonction sans l'appeler (pas f() mais f;). Imprimer 1 toujours ?"

Dans ce code, le code essaie "d'appeler" une fonction nommée pr sans utiliser de parenthèses. Cependant, cela n’appelle pas réellement la fonction. Au lieu de cela, il passe le pointeur de fonction vers la fonction cout. Lorsque le pointeur de fonction est implicitement converti en valeur booléenne, il est évalué comme vrai. Puisque true équivaut à 1 en C , la sortie est toujours 1.

Pour clarifier, les lignes suivantes du code fourni n'invoquent pas la fonction pr :

<code class="cpp">pr;
cout << pr; // output: 1
cout << *pr; // output: 1  (dereferencing the function pointer, which is still true)
cout << &pr; // output: 1 (address of the function, which is a non-zero value)</code>

Pour vraiment appeler la fonction pr, vous devrez utiliser des parenthèses comme pr().

Ce comportement découle du fait que les pointeurs de fonction sont implicitement convertibles en bool. En C 11, il est possible de surcharger l'opérateur << pour que les pointeurs de fonction fournissent une sortie plus informative. Cependant, cela ne fonctionnerait toujours pas pour les fonctions ou les modèles de fonctions surchargés sans spécifier explicitement la surcharge souhaitée (généralement via un cast).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn