Maison > développement back-end > C++ > Pourquoi l'impression d'un nom de fonction en C donne-t-elle « 1 » ?

Pourquoi l'impression d'un nom de fonction en C donne-t-elle « 1 » ?

Patricia Arquette
Libérer: 2024-10-26 03:40:03
original
814 Les gens l'ont consulté

Why Does Printing a Function Name in C   Result in

Computer une fonction sans appeler : percer le mystère

Imaginez ceci : vous codez et au lieu d'invoquer une fonction avec des parenthèses, vous imprimez simplement son nom. Étonnamment, le résultat est toujours 1. Cette approche non conventionnelle vous laisse perplexe, tant sur les 1 que sur l'absence du pointeur de fonction attendu.

Plongeons dans les subtilités de votre code :

<code class="c++">#include <iostream>
using namespace std;

void pr()
{
    cout << "sth";
}

int main()
{
    pr;
    cout << pr; // output: 1
    cout << *pr; // output: 1
    cout << &pr; // output: 1
}
Copier après la connexion

Contrairement à votre intention, vous n'appelez pas réellement la fonction pr dans le fichier cout<< déclarations. Au lieu de cela, vous transmettez son pointeur de fonction à cout. Cela provoque la conversion implicite de pr en une valeur booléenne, ce qui entraîne les 1 omniprésents dans votre sortie.

Pour améliorer votre compréhension, envisagez d'utiliser cout << boolalpha avant l'impression. Cela affichera vrai au lieu de 1, renforçant la nature booléenne de la sortie.

Alors que C 11 offre une solution élégante :

<code class="c++">template <class RType, class ... ArgTypes>
std::ostream & operator<<(std::ostream & s, RType(*func)(ArgTypes...))
{
    return s << "(func_ptr=" << (void*)func << ")(num_args="
             << sizeof...(ArgTypes) << ")";
}</code>
Copier après la connexion

Cette surcharge vous permet d'imprimer des pointeurs de fonction d'arité arbitraire , affichant des informations telles que l'adresse du pointeur de fonction et le nombre de ses arguments.

Donc, voilà : les 1 énigmatiques ne sont pas une simple coïncidence mais le résultat d'une conversion de type implicite. Comprendre ce comportement est crucial pour éviter des résultats inattendus et créer un code plus robuste.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal