inline в C++

preview_player
Показать описание
Описание ключевого слова «inline» в C++, которое сейчас убирается из стандарта. Я описываю, что это слово делало, и почему оно считается устаревшим форматом оптимизации кода.

Отблагодарить меня можно следующими способами:
Яндекс деньги: 410012245557024
Webmoney-R: R327167873071
Webmoney-Z: Z345122673518
Рекомендации по теме
Комментарии
Автор

Начиная с 17-го стандарта благодаря inline можно инициализировать static поля внутри класса/структуры:
struct Same {
static inline int value = 5;
};

Sergei_Sai
Автор

Спасибо Володя, но вы немного перепутали - стандарт частично упраздняет volatile,
inline как уже отметили в комментариях давно является рекомендацией повышающий порог при котором компилятор решает делать функцию встраиваемой см Jason Turner C++ Weekly - Ep 136 - How `inline` Might Affect The Optimizer
Если заглянуть в новый код GCC range library то можно заметить что разрабы inlin'ом не брезгуют, есть предложения добавления аналога force_inline в стандарт в виде атрибута. Инлайнить теперь можно статические переменные. Короче всё выглядит так что использование ключевого слова inline в C++ только развивается :)

МаксимХвостов-мй
Автор

inline ещё нужен, чтобы соблюдать правило odr. В Вашем примере было бы множественное определение (если делать include в main.cpp и lib.cpp). В этом случае этот keyword нужен, чтобы функция была определена единожды. По этой причине нужно все реализации функций в .h файлах помечать inline (если они находятся вне тела класса)

dominuspiritus
Автор

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

torskandinav
Автор

По вашему последнему примеру, компилятор ругается без слова инлайн, как его добавляю все ок компилируется)

Cent
Автор

На счет того, что инлайн ничего не сломает. Это не совсем правда. Если использовать многоточие в аргументах функции, то при обращении к аргументам вы получите мусор (естественно должна быть включена оптимизация, иначе инлайн вообще не применится)

ИванОсинин-си
join shbcf.ru