Я пытался разобраться со встраиванием сам, но не особо уверен в некоторых деталях.
Насколько я понял встраивание происходит автоматически, и никаких дополнительных ключевых слов для этого не надо.
Как конкретно встраиваются геттеры? допустим есть геттер:
int getSize() const noexcept { return _size; }
где _size переменная типа int, объявлённая в классе, с этим геттером.
что выдаст компилятор при вызове геттера: obj.getSize();?
этот код просто заменится на obj._size;?
Встраиваются ли функции из статических библиотек?
Встраиваются ли методы шаблонных классов?
Не повредит ли скорости работы программы использование геттеров в методах того же класса, где определены эти самые геттеры. (иногда это просто улучшает читаемость)
Ps. компилятор - Visual c++ самой последней версии.
Все функции встраиваются одинаково. Никаких особенностей именно для "геттеров" нет. На уровне языка вопроса "как встраиваются функции" не существует, ибо такое встраивание ни в чем не проявляется. А все остальное - детали реализации. Да, вполне возможно, что код просто заменится на obj._size.
Однако буквальный код obj.getSize(); обычно будет удален вообще, ибо побочных эффектов у функции нет, а результат вызова никак не используется.
Встраиваться могут только функции, чьи определения целиком и полностью видны в точке их вызова во время компиляции. Так что "статические библиотеки" тут вообще ни при чем. Встраиваемые функции по этой причине определяются в заголовочных файлах. А с каким типом библиотеки идет этот заголовочный файл - никакого значения не имеет.
Шаблонность класса никак не влияет на встраиваемость методов. Это совершенно ортогональные вопросы.
В то же время шаблонность может побочно помогать встраиваемости, ибо шаблоны обычно целиком определяются в заголовочных файлах.
Не повредит. А дальше: пробуйте и смотрите.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей