будет линкер C ++ автоматически встроен на «пропускные» функции, которые не определены в заголовке, а не явно запрошены, чтобы быть «включенным» через ключевое слово
?
Например, происходит следующее так часто , а должна всегда из «встроенного», что кажется, что каждый поставщик компилятора должен иметь «автоматически», обрабатываю его через «встроить «Через линкер (в тех случаях, когда это возможно):
//FILE: MyA.hpp
class MyA
{
public:
int foo(void) const;
};
//FILE: MyB.hpp
class MyB
{
private:
MyA my_a_;
public:
int foo(void) const;
};
//FILE: MyB.cpp
// PLEASE SAY THIS FUNCTION IS "INLINED" BY THE LINKER, EVEN THOUGH
// IT WAS NOT IMPLICITLY/EXPLICITLY REQUESTED TO BE "INLINED"?
int MyB::foo(void)
{
return my_a_.foo();
}
Я знаю, что линкер MSVS будет выполнять некоторые« встроить »через его генерацию кода времени связи (LTGCC) , и что GCC Насущная инструментария также поддерживает Оптимизация времени линии (LTO) (см.: Может ли компоновщик встроенных функций? ).
Далее, я знаю, что есть случаи, когда это не может быть «включенным», например, когда реализация не «доступна» к линкеру (например, через границы общих библиотеки, где отдельно Ссылка происходит).
Однако, если это код, связан с исполняемым одним исполняемым , который не пересекает DLL / Shared-Lib Lib, я бы ожидается Поставщик компилятора / линкера к автоматически Встроенная функция, как простая и очевидная оптимизация (выгодно как производительность, так и размер)?
Мои надежды слишком наивно?