"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 `std::cout

Por que `std::cout

Publicado em 2024-11-18
Navegar:223

Why does `std::cout

Curioso caso de f; Por que sempre imprime 1 na saída?

Encontrar um comportamento peculiar em que chamar uma função sem parênteses (f;) e imprimir seu resultado com std::cout produz consistentemente o número 1 pode levantar questões. Inicialmente, pode-se esperar que o código imprima um ponteiro de função, mas as observações indicam o contrário.

Aprofundando-se no código abaixo:

#include 
using namespace std;

void pr()
{
    cout 

Podemos ver que pr; não chama tecnicamente a função pr(). Em vez disso, o ponteiro da função está sendo passado para cout. Quando o ponteiro de função é convertido em bool durante esse processo, ele se comporta de maneira semelhante a uma expressão lógica em que um valor diferente de zero é avaliado como verdadeiro. Isso se traduz em 1 quando impresso.

Além disso, no padrão pré-C 11, não existe nenhuma sobrecarga que permita transmitir um ponteiro de função. Isso torna um desafio formatar e imprimir ponteiros de função diretamente usando std::cout. No entanto, com o advento do C 11, pode-se definir uma sobrecarga personalizada para conseguir isso:

template 
std::ostream & operator

Empregando esta sobrecarga, cout

(func_ptr=
)(num_args=0)

Este custom sobrecarga demonstra ponteiros de função de impressão de aridade variada. Embora alivie o problema dos ponteiros de função, não resolve totalmente os cenários que envolvem funções sobrecarregadas ou modelos de função onde a especificação da sobrecarga desejada se torna essencial.

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