Почему нельзя все функции сделать inline?



Технически, можно попробовать сделать все функции inline. Однако, это может привести к ряду негативных последствий:



1. Увеличение размера скомпилированного кода



Поскольку inline-функции заменяются на их вызовы во время компиляции, это может привести к увеличению размера скомпилированного кода, особенно если функции содержат большой объем кода.



2. Увеличение времени компиляции



inline-функции могут увеличить время компиляции проекта, так как компилятору нужно заменить каждый вызов функции на ее код.



3. Увеличение расхода памяти



Если функции являются часто используемыми и содержат большой объем кода, использование inline-функций может привести к увеличению расхода памяти.



4. Ограничения на использование лямбда-выражений



Применение inline-функций может ограничить возможности использования лямбда-выражений. Например, в inline-функциях нельзя использовать функции, которые не могут быть inlined, такие как protected-функции или функции из других модулей.



5. Ограничения на использование рекурсии



Использование inline-функций может ограничить возможность использования рекурсии, так как замена рекурсивного вызова функции на ее код может привести к бесконечной рекурсии или переполнению стека.



ВЫВОД: если все функции сделать inline, это может привести к экспоненциальному росту размера кода и увеличению времени компиляции. Поэтому необходимо выбирать оптимальную стратегию для каждой конкретной функции в зависимости от ее предполагаемого использования.