Я был reading связанным вопросом, который заставляет меня задавать этот вопрос.Вложенные функции не допускаются, но почему вложенные прототипы функций разрешены? [C++]
Рассмотрим следующий код
int main()
{
string SomeString();
}
Все говорит о том, компилятор принимает это в качестве прототипа функции, а не как строки объекта. Теперь рассмотрим следующий код.
int main()
{
string Some()
{
return "";
}
}
Компилятор сказал, что это недопустимо, поскольку, по-моему, определение вложенных функций не допускается. Если это недопустимо, почему вложенные прототипы функций разрешены? Это не дает никаких преимуществ, а не создает путаницу (или я пропустил некоторые действительные баллы здесь?).
Я понял, что действует.
int main()
{
string SomeFun();
SomeFun();
return 0;
}
string SomeFun()
{
std::cout << "WOW this is unexpected" << std::endl;
}
Это также сбивает с толку. Я ожидал, что функция SomeFun() будет иметь область действия только в main. Но я был неправ. Почему компилятор позволяет компилировать код, как указано выше? Есть ли ситуации в реальном времени, когда смысл кода, подобного приведенному выше, имеет смысл?
Любые мысли?
+1 Просто нажмите на тот же запрос, и ответы ниже содержат всю информацию и многое другое. – slashmais