будет линкером C ++ автоматически встроенными функциями (без «встроенного» ключевого слова, без реализации в заголовке)?

будет линкер 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, я бы ожидается Поставщик компилятора / линкера к автоматически Встроенная функция, как простая и очевидная оптимизация (выгодно как производительность, так и размер)?

Мои надежды слишком наивно?

15
задан Community 23 May 2017 в 10:30
поделиться