Читая некоторые ответы на этот вопрос , я начал задаваться вопросом, почему компилятору на самом деле нужно знать о функции, когда она впервые встречает ее. Разве не было бы просто добавить дополнительный проход при разборе модуля компиляции, который собирает все символы, объявленные внутри, чтобы порядок, в котором они объявлялись и использовались, больше не имел значения?
Можно утверждать, что объявление функций перед их использованием, безусловно, является хорошим стилем, но мне интересно, есть ли какая-либо другая причина, почему это обязательно в C ++?
Редактировать - пример для иллюстрации: Предположим, вам нужны функции, которые встроены в заголовочный файл. Эти две функции вызывают друг друга (возможно, это рекурсивный обход дерева, где нечетные и четные слои дерева обрабатываются по-разному). Единственный способ решить эту проблему - сделать предварительное объявление одной из функций перед другой.
Более распространенный пример (хотя с классами, а не функциями) - это классы с конструкторами и фабриками private
. Фабрике необходимо знать класс, чтобы создавать его экземпляры, а классу необходимо знать фабрику для объявления friend
.
Если это требование издревле, почему оно не было снято в какой-то момент? Это не сломало бы существующий код, не так ли?