Некоторые отличия между inline и static переменными в C++:
- Область видимости. 25 Переменная, объявленная без слова static, имеет внешнее связывание — существует в единственном экземпляре во всей программе. 2 Переменная со словом static имеет внутреннее связывание — существует как отдельная переменная в каждой единице трансляции, в которой объявлена. 2
- Время жизни. 1 Статическая локальная переменная живёт от первого вызова функции и до конца программы. 1 Переменная, объявленная без слова static, существует только во время запуска и выхода программы. 1
- Определение. 14 Inline-функции нельзя разделить на объявление и определение. 1 Их можно и нужно определять в заголовочных файлах. 14 Все определения одной и той же inline-функции в разных модулях должны быть идентичными. 14
- Инициализация. 2 Переменная, объявленная со словом static, инициализируется в заголовочном файле, при этом каждая единица трансляции работает со своей копией объекта. 2 Переменная, объявленная без слова static, инициализируется в одной единице трансляции. 2
Таким образом, основное отличие заключается в том, что static определяет область видимости и время жизни переменной, а inline — способ её определения.