@SibVektor

Есть ли смысл использовать inline-функцию?

Есть такой код:
class SomeClass {
public:
    SomeClass(const QString &name)
        : _name(name)
    {}
    
    inline name() const { return _name; }

private:
    QString _name;
};


Есть ли смысл тут использовать inline-функцию? Видел частенько такое в коде, но разве такая функция «распакуется» во что-то? Если да, то каким образом, _name ведь приватный член? :-)
  • Вопрос задан
  • 671 просмотр
Пригласить эксперта
Ответы на вопрос 3
@none7
Приватный или нет, это важно лишь на уровне проверки исходного кода. Оптимизатор же должен только выдать код, результат которого во время выполнения будет идентичен ожидаемому. Есть ли смысл? Gcc сам сделает inline столь короткого метода во время компиляции, если увидит его реализацию, но полагаю может возникнуть конфликт во время линковки, если один и тот же метод без inline будет подключаться к нескольким файлам. MSVC сам оптимизирует этот участок во время линковки даже если компилятор не видел реализации соответствующего метода.
Ответ написан
Комментировать
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Приватныe пeрeмeнныe - для программиста. Дажe ошибки выдаются в стилe - нeльзя использовать ххх так как он приватный. Это значит про пeрeмeнную компилятор знаeт.
Любой мeтод class{method(...)} внутри компилятора выглядит так: method(class *instance, type1 var1,...). Поэтому заинлайнится как instance->_name
Смысл использовать это слово нeт. Eсли тeло функции ужe написано в хeдeрe, то мeтод ужe инлайнится. Поэтому эта запись выглядит как масло масляноe.
И нe надо дeлать за компиляторы их работу. Лучшe eсли они сами рeшат нужeн инлайн или нeт.
Ответ написан
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Вот конкретно тут нет смысла. Компилятор с большой вероятностью сам заинлайнит эту функцию. Вообще ключевое слово inline имеет только одно верное использование в современных реалиях: для функций (обычных или специализаций) объявленных и определённых в заголовочных файлах, в случае если файл исходников отсутствует или там нет реализации функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы