Щоб зрозуміти "інлійн", вам потрібно зрозуміти історію і те, яким було життя 20 (і 30) років тому.
Ми писали код на комп’ютерах, у яких мало пам'яті, тому компілятору не вдалося обробити весь код, який складав програму за один раз. Компілятор також був дуже повільним, тому вам не потрібно було перекомпілювати код, який не змінився - за 24 години (на комп’ютері, який коштував більше, ніж автомобіль верхнього кінця) для перекомпіляції всього коду було нормально для кількох проектів. працював над.
Тому кожен файл коду був окремо зібраний у файли об'єктів. Кожен об’єктний файл починався зі списку всієї функції, що містилася, разом із "адресою" функції. Об'єктний файл також мав перелік усіх функцій, які він викликав в інших файлах об'єкта, а також розташування виклику.
Спочатку лінкер прочитав би всі об'єктні файли та створив список усіх експортованих функцій, а також файл, у якому вони знаходились, та адресу. Потім він буде перечитати всі об’єктні файли, вивівши їх у програмний файл, при цьому оновивши всі "зовнішні" виклики функції з адресою функції.
Лінкер не змінив і не оптимізував машинний код, створений компілятором, інакше, ніж виправити посилання на зовнішні виклики функцій. Лінкер був частиною операційної системи і передував більшості компіляторів. Коли люди написали новий компілятор, їм знадобився, щоб він працював з поточними посиланнями, і щоб мати можливість посилатися на поточні файли об'єктів, інакше системні дзвінки не могли здійснюватися.
Компілятор лише коли-небудь бачив код у файлі ".c" або ".cpp", який він компілював разом із усіма включеними файлами заголовків. Тож не вдалося зробити оптимізацію на основі коду в інших файлах ".c" або ".cpp".
Ключове слово "вбудований" дозволило визначити тіло функції (методу) у файлі заголовка, отже, дозволило компілятору використовувати код функції під час компіляції коду, який її викликає. Наприклад, скажімо, що у вас був клас колекції, визначений у файлі anther .cpp, у цього класу був би метод "isEmpty", який містив би один рядок коду, було б велике прискорення результуючої програми, якщо замість виклику функції , виклик функції було замінено на цю лінію.
Ключове слово "вбудований" в той час розглядалося як "дешевий і простий" спосіб дозволити інкапсуляцію даних, уникаючи витрат на виклики функцій, без цього багато програмістів мали б просто отримати доступ до приватних полів об'єкта. (Макроси, де набагато гірший спосіб "вбудовування" коду, який там, де поширений на той час.)
У наші дні "лінкери" роблять багато оптимізації коду і, як правило, деякі команди записують як компілятор. Компілятор часто просто перевіряє правильність коду і «стискає» його, залишаючи більшість завдань створення машинного коду посилання.