Ключевое слово inline
на самом деле имеет мало общего с оптимизацией.Большинство компиляторов встраивают функцию , вызывая (саму функцию, возможно, придется компилировать отдельно, например, если вы берете ее адрес где-то еще), независимо от того, присутствует ключевое слово inline
или нет.
Фактически, даже если одна вызываемая функция находится в другом модуле перевода, умный компоновщик может встроить его во время соединения (MSVC предоставляет эту функцию как «генерацию временного кода связи»).Это требует тесного сотрудничества между компилятором и компоновщиком.
raison d'être ключевого слова inline
позволяет функциям [non template] нарушать правило единого определения,и, таким образом, должны быть определены в заголовочных файлах.Фактическое встраивание функции будет определяться компилятором на основе различных эвристических и оптимизационных флагов, переданных ей, и , а не на основе ключевого слова inline
.
Так широко используется inline
вероятно, ничего не сделает с производительностью.Если вы беспокоитесь о производительности, используйте профилировщик, чтобы определить, где ваша программа проводит время (часто там, где вы этого не ожидаете), и действуйте соответствующим образом, оптимизируя узкое фактическое узкое место.