Хотя в некоторых ситуациях было бы очень удобно использовать встроенные функции,
Есть ли недостатки у встроенных функций?
Заключение:
Судя по всему, в использовании встроенных функций нет ничего плохого.
Но стоит отметить следующие моменты!
Чрезмерное использование встраивания действительно может замедлить работу программ. В зависимости от размера функции ее встраивание может привести к увеличению или уменьшению размера кода. Встраивание очень маленькой функции доступа обычно уменьшает размер кода, в то время как встраивание очень большой функции может значительно увеличить размер кода. На современных процессорах меньший код обычно выполняется быстрее из-за лучшего использования кеша инструкций. - Рекомендации Google
Преимущества встроенных функций в скорости имеют тенденцию уменьшаться по мере увеличения размера функции. В какой-то момент накладные расходы на вызов функции становятся небольшими по сравнению с выполнением тела функции, и выгода теряется - Источник
Есть несколько ситуаций, когда встроенная функция может не работать:
- For a function returning values; if a return statement exists.
- Для функции, не возвращающей никаких значений; если существует цикл, переключатель или оператор goto.
- Если функция рекурсивная. -Источник
Ключевое слово
__inline
заставляет функцию быть встроенной, только если вы укажете опцию оптимизации. Если указано optimize, то, будет ли учитываться__inline
, зависит от настройки параметра встроенного оптимизатора. По умолчанию встроенный параметр действует при каждом запуске оптимизатора. Если вы указываете optimize, вы также должны указать опцию noinline, если хотите, чтобы ключевое слово__inline
игнорировалось. -Источник
inline
позволяет избежать нарушений ODR для автономных функций, определенных в библиотеках только для заголовков. Это использованиеinline
, которое компилятор не может игнорировать. Он по-прежнему может отказаться от фактического встраивания функции, но должен рассматривать ее так, как будто существует только одно определение. - person zett42   schedule 29.09.2018