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 & operatorEmpregando 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.
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