"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que imprimir um ponteiro de função sem invocação produz "1" em C++?

Por que imprimir um ponteiro de função sem invocação produz "1" em C++?

Publicado em 2024-11-14
Navegar:148

Why Does Printing a Function Pointer Without Invocation Yield \

Imprimindo um ponteiro de função sem invocação: entendendo a saída misteriosa de 1

Em um trecho de código intrigante, uma função é "chamada" sem invocando seus parênteses ("pr;") e depois impresso usando std::cout. Surpreendentemente, o resultado produz consistentemente 1, desafiando as expectativas.

O enigma dos 1s constantes

O código chama a função de três maneiras diferentes:

cout 

A intuição sugere que um ponteiro de função deve ser impresso em vez dos enigmáticos 1s. No entanto, entender esse comportamento requer um aprofundamento nos mecanismos de conversão de tipo de C.

Conversão de tipo e valores bool

Quando passado como um argumento para cout, pr é implicitamente convertido em um bool. Essa conversão ocorre porque bool é um tipo fundamental e cout requer um tipo fundamental como entrada. Em C , um valor bool convertido é verdadeiro se o valor original for diferente de zero e falso se for zero.

Como pr é um ponteiro de função, seu valor é um endereço de memória diferente de zero. Conseqüentemente, quando convertido para bool, ele é avaliado como verdadeiro, que é gerado como 1 por cout.

Personalizando a impressão do ponteiro de função (C 11 em diante)

C 11 apresenta uma sobrecarga personalizável que permite a impressão mais informativa de ponteiros de função:

template 
std::ostream & operator

Essa sobrecarga imprime o endereço do ponteiro de função e o número de argumentos necessários. Pode ser usado para imprimir pr da seguinte forma:

cout 

Essa abordagem fornece uma saída mais descritiva, facilitando a compreensão das propriedades do ponteiro de função.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3