Вопросы по поводу inline (встраивания) геттеров

218
03 октября 2021, 10:10

Я пытался разобраться со встраиванием сам, но не особо уверен в некоторых деталях.
Насколько я понял встраивание происходит автоматически, и никаких дополнительных ключевых слов для этого не надо.

  1. Как конкретно встраиваются геттеры? допустим есть геттер:
    int getSize() const noexcept { return _size; } где _size переменная типа int, объявлённая в классе, с этим геттером.
    что выдаст компилятор при вызове геттера: obj.getSize();?
    этот код просто заменится на obj._size;?

  2. Встраиваются ли функции из статических библиотек?

  3. Встраиваются ли методы шаблонных классов?

  4. Не повредит ли скорости работы программы использование геттеров в методах того же класса, где определены эти самые геттеры. (иногда это просто улучшает читаемость)

Ps. компилятор - Visual c++ самой последней версии.

Answer 1
  1. Все функции встраиваются одинаково. Никаких особенностей именно для "геттеров" нет. На уровне языка вопроса "как встраиваются функции" не существует, ибо такое встраивание ни в чем не проявляется. А все остальное - детали реализации. Да, вполне возможно, что код просто заменится на obj._size.

    Однако буквальный код obj.getSize(); обычно будет удален вообще, ибо побочных эффектов у функции нет, а результат вызова никак не используется.

  2. Встраиваться могут только функции, чьи определения целиком и полностью видны в точке их вызова во время компиляции. Так что "статические библиотеки" тут вообще ни при чем. Встраиваемые функции по этой причине определяются в заголовочных файлах. А с каким типом библиотеки идет этот заголовочный файл - никакого значения не имеет.

  3. Шаблонность класса никак не влияет на встраиваемость методов. Это совершенно ортогональные вопросы.

    В то же время шаблонность может побочно помогать встраиваемости, ибо шаблоны обычно целиком определяются в заголовочных файлах.

  4. Не повредит. А дальше: пробуйте и смотрите.

READ ALSO
Вывод символа новой строки в неизвестный поток

Вывод символа новой строки в неизвестный поток

Как правильно вывести символ новой строки в поток std::ostream, передаваемый функции?

83
JavaScript отладка

JavaScript отладка

У меня есть функция на 20000 строк

286
Не работает copyToClipboard js в chrome extension

Не работает copyToClipboard js в chrome extension

Создаю расширение для chromeСтолкнулся с проблемой копирования текста на js

299
Как ограничить диапазон дат в bootstrap datepicker?

Как ограничить диапазон дат в bootstrap datepicker?

Использую плагин bootstrap datepicker для выбора датКак можно прописать ограничение, чтобы можно было выбрать даты в диапазоне от 18 до 100 лет?

150