Спецификаторы, квалификаторы и шаблоны
В C++ не так-то просто объявить переменную или функцию. Когда для неё стоит указывать static и inline? const и constexpr? Что насчёт consteval и constinit? Как всё это взаимодействует с шаблонами? В этом докладе Михаил попытается разложить по полочкам всё это многообразие.
Уже в C++98 у нас были const, volatile, static, extern, inline и, конечно, шаблоны. В C++11 добавились thread_local, constexpr, а также extern для шаблонов. В C++14 добавились шаблоны переменных. В C++17 — inline переменные. В C++20 обещают подвезти consteval и constinit. А вы когда-нибудь задумывались, что такое template static inline thread_local constexpr const volatile переменная?
В этом докладе Михаил попытается разложить по полочкам всё это многообразие ключевых слов. Вспомним про linkage, storage duration и инстанциации шаблонов (и что изменится с приходом модулей в C++20). Разберёмся, какая связь между template и inline, между static и constexpr. Поймём, зачем нам extern, когда у нас есть inline. И осознаем, как нам потребовалось почти 20 лет, чтобы научиться нормально объявлять константы.
Доклад рассчитан на базовое знание языка.
Комментарий программного комитета:
Мы можем расставить так много ключевых слов при объявлении переменных, функций и методов, что в них уже легко запутаться. В своём докладе Михаил разложит нам по полочкам все эти квалификаторы и спецификаторы при объявлениях.
-
https://assets.ctfassets.net/oxjq45e8ilak/2THKNWRgEem6mRv5gE5aKb/34532d8b592065f959200106d8c3950b/CppRussia_-Qualifiers_and_specifiers-Mikhail_Matrosov__3.pdf