Хорошо, я знаю, что это похоже на дубликат Почему функции должны быть объявлены до их использования?, но это не похоже на то, что существующие ответы полностью адресованы все детали.
Я знаю, что С++ изначально был разработан в 80, поэтому его можно было перевести за один проход, потому что компьютеры были медленными. ОК. Но самый последний стандарт был опубликован в 2011 году, поэтому я не понимаю, почему компиляторы С++ не могут сейчас делать что-то, требующее нескольких проходов. Да, но это все равно повредило бы производительность, но только если это действительно стало необходимым. Итак, для следующего потребуется только один проход:
void foo();
int main() { foo(); }
void foo() {}
тогда как для следующего, компилятор мог бы сделать два (и быть медленнее), потому что он не знает, является ли foo
функцией или типом, пока не увидит объявление ниже:
int main() { foo(); }
void foo() {}
и если вы попытались использовать функцию, не объявив ее сначала, а декларация вообще не находится в текущем блоке перевода, , то это будет ошибка. Но если он в одной и той же единицы перевода, то компилятор мог бы просто сделать дополнительные проходы.
Мой коллега утверждает, что такая функция сэкономит много времени для разработчиков и позволит избежать проблем с совпадением декларации и определения. И я уверен, что это было предложено много раз и каждый раз отклонялось. Какова фактическая аргументация за отказ от нее, т.е. Обоснование комитета?