Estaba viendo el código que me envió un amigo y me dijo: "Compila, pero no funciona". Vi que utiliza las funciones sin los paréntesis, así:¿Por qué el compilador C++ no se queja cuando uso funciones sin paréntesis?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
El primero que dije fue "paréntesis uso, hay que". Y luego probé ese código: compila, pero cuando se ejecuta no funciona (no se muestra "Hello world").
Entonces, ¿por qué se compila (sin advertencia del compilador GCC 4.7), pero no funciona?
Realmente funciona. 'foo' se trata como es, un puntero a la función. La línea 'foo;' es solo una línea sin efecto. Si cambia sus advertencias al máximo, debería recibir una advertencia sobre una declaración sin efecto. – RedX
Veo * "advertencia: instrucción es una referencia, no llamada, para funcionar 'foo'" * y * "advertencia: instrucción no tiene efecto" *. Probablemente quiera compilar con -Wall -Wextra – Flexo
(Para preguntas futuras, vale la pena ponerlo en '#include 'y cualquier espacio de nombres para completar su muestra) –
Flexo