Встраивание обычно выполняется в пределах одной единицы перевода (файл .cpp).Когда вы вызываете функции из другого файла, они никогда не встраиваются.
Оптимизация времени ссылки (LTO) меняет это, позволяя встраиванию работать между единицами перевода.Оно всегда должно быть равно или лучше (иногда очень и очень значительно) регулярному связыванию с точки зрения эффективности сгенерированного кода.
Причина, по которой оба варианта все еще доступны, заключается в том, что LTO может занимать большой объем оперативной памяти иПроцессор - у меня было VC ++ занимать несколько минут на связывание большого проекта C ++ раньше.Иногда не стоит включать, пока вы не отправите.Вы также можете исчерпать адресное пространство в достаточно большом проекте, так как он должен загружать весь этот байт-код в ОЗУ.
Для написания эффективного кода ничего не меняется - все те же правила применяются с LTO.Потенциально более эффективно явно определить встроенную функцию в заголовочном файле, а не встраивать ее в зависимости от LTO.Ключевое слово inline предоставляет только подсказку, поэтому нет никакой гарантии, но оно может подтолкнуть его к тому, что оно будет встроенным там, где обычно (с или без LTO) это не будет.