inline переменные
Так, ну это уже перебор. inline для функций окей, можем встроить ее код в место вызова. Но что значит встроенная переменная? Мы же в месте, где используется переменная просто ссылаемся на оригинал переменной через указатель(адресом переменной для динамических объектов или отступом от регистра для локальных). Переменная - это же память. Не понятно, что значит встроить память в код. Это в принципе не имеет смысла. Разве что можно встроить какие-нибудь чиселки в непосредственное место их использования как один из операндов. Но компилятор уже это и так делает, без наших просьб. В чем тогда смысл?
Мы уже поговорили о том, что смысл ключевого слова inline для функций в современных реалиях С++ - это уже совсем не про inline expansion, а про обеспечение обхода ODR. Это позволяет определять функцию прямо в хэдере. При этом линкер не обидится на нас и даже прогарантирует, что объединит все определения в одно и тогда в места вызова функции будет даже один и тот же адрес подставляться.
И вот именно эту семантику и перенимают переменные в С++17, которые теперь могут быть помечены ключевым словом inline. Какие конкретно преимущества теперь получают переменные?
Теперь мы прямо в заголовочнике можем определить значение для переменной, например, константы. Компоновщик просто потом объединит все определения в одно. То есть будет всего один оригинал переменной и гарантируется, что она будет создана только один раз и совместно будет использоваться во всех файлах с кодом.
Что это нам дает?
1️⃣ Внешнее связывание inline дает нам преимущества компактности размера скомпилированного кода.
2️⃣ Компилятор может оптимизировать переменные как он хочет, потому что видит определение на момент компиляции.
3️⃣ По той же причине, все compile-time вычисления имеют место быть.
4️⃣ Нет перекомпиляции за неиспользованные переменные.
5️⃣ Определение находится в хэдере и это удобно смотреть.
Все проблемы отсюда и отсюда решены!! Магия вне Хогвартса!
На картинке показано, как с новыми знаниями можно определять константы в хэдерах.
Stay satisfied. Stay cool.
#cppcore #compiler #cpp17
Так, ну это уже перебор. inline для функций окей, можем встроить ее код в место вызова. Но что значит встроенная переменная? Мы же в месте, где используется переменная просто ссылаемся на оригинал переменной через указатель(адресом переменной для динамических объектов или отступом от регистра для локальных). Переменная - это же память. Не понятно, что значит встроить память в код. Это в принципе не имеет смысла. Разве что можно встроить какие-нибудь чиселки в непосредственное место их использования как один из операндов. Но компилятор уже это и так делает, без наших просьб. В чем тогда смысл?
Мы уже поговорили о том, что смысл ключевого слова inline для функций в современных реалиях С++ - это уже совсем не про inline expansion, а про обеспечение обхода ODR. Это позволяет определять функцию прямо в хэдере. При этом линкер не обидится на нас и даже прогарантирует, что объединит все определения в одно и тогда в места вызова функции будет даже один и тот же адрес подставляться.
И вот именно эту семантику и перенимают переменные в С++17, которые теперь могут быть помечены ключевым словом inline. Какие конкретно преимущества теперь получают переменные?
Теперь мы прямо в заголовочнике можем определить значение для переменной, например, константы. Компоновщик просто потом объединит все определения в одно. То есть будет всего один оригинал переменной и гарантируется, что она будет создана только один раз и совместно будет использоваться во всех файлах с кодом.
Что это нам дает?
1️⃣ Внешнее связывание inline дает нам преимущества компактности размера скомпилированного кода.
2️⃣ Компилятор может оптимизировать переменные как он хочет, потому что видит определение на момент компиляции.
3️⃣ По той же причине, все compile-time вычисления имеют место быть.
4️⃣ Нет перекомпиляции за неиспользованные переменные.
5️⃣ Определение находится в хэдере и это удобно смотреть.
Все проблемы отсюда и отсюда решены!! Магия вне Хогвартса!
На картинке показано, как с новыми знаниями можно определять константы в хэдерах.
Stay satisfied. Stay cool.
#cppcore #compiler #cpp17