Иногда я пишу код, подобный следующему
struct Bob
{
Bob() {}
};
int main()
{
Bob b();
}
Я хотел создать объект b, используя конструктор Боба по умолчанию. Чтобы это исправить, я должен снять скобки после б. Оказывается, компилятор интерпретирует строку как прототип функции в противном случае!
Хорошо, я могу понять, что следовать правилу. Но почему вы все равно можете поместить прототип функции в функцию? Какова цель?
Предположительно, потому что в C этот синтаксис не имел другого возможного значения (без функций-членов или конструкторов), поэтому они указали, что он является объявлением функции.
Затем, когда C ++ унаследовал функциональность от C, они не могли изменить значение такой конструкции, не рискуя сломать существующий код.
Если вы спрашиваете, почему они вообще допускают локальные объявления функций, то это может быть потому, что они хотели, чтобы функции были настолько ограничены, чтобы их можно было использовать как можно точнее, или они могут быть просто потеряны во времени.
Других решений пока нет …