¿Por qué las funciones deben declararse antes de ser utilizadas?

Al leer algunas respuestas aesta pregunta, Comencé a preguntarme por qué el compilador realmentehace necesita saber acerca de una función cuando la encuentra por primera vez. ¿No sería simple agregar un pase adicional al analizar una unidad de compilación que recolecta todos los símbolos declarados dentro, de modo que el orden en el que se declaran y usan ya no importa?

Se podría argumentar que declarar funciones antes de que se usen ciertamente es un buen estilo, pero me pregunto, ¿hay alguna otra razón por la que esto sea obligatorio en C ++?

Editar: un ejemplo para ilustrar: Suponga que tiene que definir funciones en línea en un archivo de encabezado. Estas dos funciones se llaman entre sí (quizás un recorrido recursivo del árbol, donde las capas pares e impares del árbol se manejan de manera diferente). La única forma de resolver esto sería hacer una declaración adelantada de una de las funciones antes que la otra.

Un ejemplo más común (aunque con clases, no funciones) es el caso de clases conprivate constructores y fábricas. La fábrica necesita conocer la clase para crear instancias de ella, y la clase necesita conocer la fábrica parafriend declaración.

Si este requisito es de los viejos tiempos, ¿por qué no se eliminó en algún momento? No rompería el código existente, ¿verdad?

Respuestas a la pregunta(11)

Su respuesta a la pregunta