Fui reading la pregunta vinculada que me lleva a hacer esta pregunta.No se permiten las funciones anidadas, pero ¿por qué se permiten los prototipos de función anidada? [C++]
considere el siguiente código
int main()
{
string SomeString();
}
Todo dice, compilador toma esto como un prototipo de función y no como un objetocadena. Ahora considere el siguiente código.
int main()
{
string Some()
{
return "";
}
}
El compilador dijo que esto no es válido ya que supongo que la definición de función anidada no está permitida. Si no está permitido, ¿por qué se permiten los prototipos de funciones anidadas? No da ninguna ventaja en lugar de crear confusión (¿o me faltan algunos puntos válidos aquí?).
Me di cuenta de que la siguiente es válida.
int main()
{
string SomeFun();
SomeFun();
return 0;
}
string SomeFun()
{
std::cout << "WOW this is unexpected" << std::endl;
}
Esto también es confuso. Esperaba que la función SomeFun() tenga un alcance solo en principal. Pero estaba equivocado. ¿Por qué el compilador permite compilar código como el anterior? ¿Hay alguna situación en tiempo real donde el código como el anterior tenga sentido?
¿Alguna idea?
+1 Simplemente pulse en la misma consulta, y las respuestas a continuación tienen toda la información y más. – slashmais