Я також хотів би додати, що якщо ви не виконуєте мільйони наборів / наборів за кадр, це майже не має значення, вбудовані вони чи ні. Чесно кажучи, не варто втрачати сон.
Крім того, майте на увазі, що те, що ви поставили слово "вбудований" перед декларацією + визначенням, не означає, що компілятор вбудує ваш код. Він використовує різні евристики, щоб з’ясувати, чи має це сенс, що часто є класичним компромісом швидкості проти розміру. Однак існує ключове слово "__forceinline" за наймом у VC ++ (я не впевнений, що це в GCC), яке накладає увагу на фантастичну евристику компіляторів. Я насправді не рекомендую це взагалі, і, крім того, як тільки ви перенесете іншу архітектуру, це, швидше за все, буде неправильним.
Спробуйте помістити всі визначення функцій у файл реалізації та залиште чисті декларації для заголовків (якщо, звичайно, ви не метапрограмуєте шаблон (STL / BOOST / і т. Д.), І в цьому випадку майже все є в заголовках;))
Одне з класичних місць, які люди люблять вбудовувати (принаймні у відеоіграх, звідки я родом), - це математичні заголовки. Продукти з перехрещенням / крапками, довжини векторів, очищення матриці тощо часто розміщуються в заголовку, що, на мою думку, є непотрібним. 9/10 це не має значення для продуктивності, і якщо вам коли-небудь потрібно буде зробити щільний цикл, наприклад, перетворення великого векторного масиву за допомогою якоїсь матриці, вам, мабуть, краще вручну робити математику вбудовано або навіть краще її кодувати в асемблер для певної платформи.
О, і ще один момент, якщо ви відчуваєте, що вам дійсно потрібен клас, щоб мати більше даних, ніж код, подумайте про використання старої доброї структури, яка не приносить із собою багажу абстракції OO, для цього він і існує. :)
Вибачте, не мав на увазі продовжувати так багато, але я просто думаю, що це допомагає розглядати випадки використання в реальному світі, і не занадто зациклюватися на педантичних налаштуваннях компілятора (повірте мені, я був там;))
Удачі.
Шейн