Curioso Caso de f; ¿Por qué siempre imprime 1 en la salida?
Encontrar un comportamiento peculiar en el que llamar a una función sin paréntesis (f;) e imprimir su resultado con std::cout produce consistentemente el número 1 puede generar preguntas. Inicialmente, uno podría esperar que el código imprima un puntero de función, pero las observaciones indican lo contrario.
Profundizando en el código a continuación:
#include
using namespace std;
void pr()
{
cout Podemos ver que pr; técnicamente no llama a la función pr(). En cambio, el puntero de función se pasa a cout. Cuando el puntero de función se convierte en bool durante este proceso, se comporta de manera similar a una expresión lógica donde un valor distinto de cero se evalúa como verdadero. Esto se traduce en 1 cuando se imprime.
Además, en el estándar anterior a C 11, no existe ninguna sobrecarga que permita transmitir un puntero de función. Esto dificulta formatear e imprimir punteros de función directamente usando std::cout. Sin embargo, con la llegada de C 11, se puede definir una sobrecarga personalizada para lograr esto:
template
std::ostream & operatorEmpleando esta sobrecarga, cout
(func_ptr=)(num_args=0)
Esta costumbre La sobrecarga muestra punteros de función de impresión de diferente aridad. Si bien alivia el problema de los punteros de función, no resuelve completamente los escenarios que involucran funciones sobrecargadas o plantillas de funciones donde especificar la sobrecarga deseada se vuelve esencial.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3