inline ещё нужен, чтобы соблюдать правило odr. В Вашем примере было бы множественное определение (если делать include в main.cpp и lib.cpp). В этом случае этот keyword нужен, чтобы функция была определена единожды. По этой причине нужно все реализации функций в .h файлах помечать inline (если они находятся вне тела класса)
Спасибо Володя, но вы немного перепутали - стандарт частично упраздняет volatile, inline как уже отметили в комментариях давно является рекомендацией повышающий порог при котором компилятор решает делать функцию встраиваемой см Jason Turner C++ Weekly - Ep 136 - How `inline` Might Affect The Optimizer Если заглянуть в новый код GCC range library то можно заметить что разрабы inlin'ом не брезгуют, есть предложения добавления аналога force_inline в стандарт в виде атрибута. Инлайнить теперь можно статические переменные. Короче всё выглядит так что использование ключевого слова inline в C++ только развивается :)
Не знаю почему в ++ хотят отказаться от inline, В kotlin я его использую для того что бы не было стирания типов, и это прям очень нужная иногда вещь, но опять inline надо с умом применять, тут я думаю так же.
На счет того, что инлайн ничего не сломает. Это не совсем правда. Если использовать многоточие в аргументах функции, то при обращении к аргументам вы получите мусор (естественно должна быть включена оптимизация, иначе инлайн вообще не применится)
Начиная с 17-го стандарта благодаря inline можно инициализировать static поля внутри класса/структуры:
struct Same {
static inline int value = 5;
};
Спасибо, Володя, за этот урок
inline ещё нужен, чтобы соблюдать правило odr. В Вашем примере было бы множественное определение (если делать include в main.cpp и lib.cpp). В этом случае этот keyword нужен, чтобы функция была определена единожды. По этой причине нужно все реализации функций в .h файлах помечать inline (если они находятся вне тела класса)
Спасибо за видео!
Спасибо Володя, но вы немного перепутали - стандарт частично упраздняет volatile,
inline как уже отметили в комментариях давно является рекомендацией повышающий порог при котором компилятор решает делать функцию встраиваемой см Jason Turner C++ Weekly - Ep 136 - How `inline` Might Affect The Optimizer
Если заглянуть в новый код GCC range library то можно заметить что разрабы inlin'ом не брезгуют, есть предложения добавления аналога force_inline в стандарт в виде атрибута. Инлайнить теперь можно статические переменные. Короче всё выглядит так что использование ключевого слова inline в C++ только развивается :)
Время покажет. :) Возможно inline постигнет такая же участь как и register.
Пэй Мэй от мира программирования
По вашему последнему примеру, компилятор ругается без слова инлайн, как его добавляю все ок компилируется)
Спасибо!
Не знаю почему в ++ хотят отказаться от inline, В kotlin я его использую для того что бы не было стирания типов, и это прям очень нужная иногда вещь, но опять inline надо с умом применять, тут я думаю так же.
Я дурак использовал инлайн с многоточием в аргументах функции
в доках про это написано вроде, если ты про аналог джавовского vararg говоришь.
расскажи пожалуйста про cmake
На счет того, что инлайн ничего не сломает. Это не совсем правда. Если использовать многоточие в аргументах функции, то при обращении к аргументам вы получите мусор (естественно должна быть включена оптимизация, иначе инлайн вообще не применится)