Есть два значения использования ключевого слова inline
(§ 7.1.3/4):
- Он подсказывает компилятору, что подстановка тела функции в точке вызова предпочтительнее обычного механизма вызова функции.
- Даже если встроенная подстановка опущена, следуют другие правила (особенно w.r.t Одно правило определения) для строки.
Обычно любой основной компилятор в случае необходимости заменяет тело функции в точке вызова, поэтому функция маркировки inline
просто для #1
не нужна.
Далее w.r.t #2
, Как я понимаю, когда вы объявляете функцию как функцию static inline
,
Ключевое слово static
в функции заставляет функцию inline
иметь внутреннюю привязку (встроенные функции имеют внешнюю привязку). Каждый экземпляр такой функции рассматривается как отдельная функция (адрес каждой функции отличается) и каждый экземпляр этих функций имеет свои собственные копии статических локальных переменных и строковых литералов (встроенная функция имеет только одну копию)
Таким образом, такая функция действует как любая другая функция static
, а ключевое слово inline
больше не имеет значения, оно становится излишним.
Итак, практическая маркировка функции static
и inline
обе не имеет никакого смысла. Либо он должен быть static
(не самый предпочтительный), либо inline
(наиболее предпочтительно),
Итак, используется ли static
и inline
вместе в функции практически бесполезно?