No puedo resolver esto:
int main() {
int (*) (int *) = 5;
return 0;
}
La asignación anterior se compila con g ++ c ++ 11. Sé que int (*) (int *)
es un puntero a una función que acepta un (int *)
argumento como y devuelve un int, pero no entiendo cómo podrías equipararlo a 5. Al principio pensé que era una función que constantemente devuelve 5 (de mi aprendizaje reciente en F #, probablemente, jaja), luego pensé, brevemente, que el puntero de función apunta a la ubicación de memoria 5, pero eso no funciona, claramente, y tampoco los valores hexadecimales.
Pensando que podría deberse a que la función devuelve un int, y que asignar un int está bien (de alguna manera), también probé esto:
int * (*) (int *) = my_ptr
donde my_ptr
es de tipo int *
, el mismo tipo que este segundo puntero de función, como en el primer caso con el tipo int. Esto no se compila. Asignar 5, o cualquier valor int, en lugar de my_ptr
, tampoco se compila para este puntero de función.
Entonces, ¿qué significa la asignación?
Actualización 1
Tenemos la confirmación de que es un error, como se muestra en la mejor respuesta. Sin embargo, todavía no se sabe qué sucede realmente con el valor que asigna al puntero de función, o qué sucede con la asignación. ¡Cualquier (buena) explicación al respecto sería muy apreciada! Consulte las ediciones a continuación para obtener más claridad sobre el problema.
Editar 1
Estoy usando gcc versión 4.8.2 (en Ubuntu 4.8.2)
Editar 2
En realidad, equipararlo con cualquier cosa funciona en mi compilador. Incluso equipararlo a una variable std :: string, o un nombre de función que devuelve un doble, funciona.
Editar 2.1
Curiosamente, convertirlo en un puntero de función a cualquier función que devuelva un tipo de datos que no sea un puntero, permitirá que se compile, como
std::string (*) () = 5.6;
Pero tan pronto como el puntero de la función es a una función que devuelve algún puntero, no se compila, como con
some_data_type ** (*) () = any_value;