Михаил Матросов - Спецификаторы, квалификаторы и шаблоны
ฝัง
- เผยแพร่เมื่อ 6 ก.พ. 2025
- Ближайшая конференция - C++ Russia 2025, 20-21 марта, Москва + online. Подробности и билеты: jrg.su/9Sszhd
- -
Уже в С++98 у нас были const, volatile, static, extern, inline и, конечно, шаблоны. В С++11 добавились thread_local, constexpr, а также extern для шаблонов. В С++14 добавились шаблоны переменных. В С++17 - inline переменные. В С++20 обещают подвезти consteval и constinit. А вы когда-нибудь задумывались, что такое template static inline thread_local constexpr const volatile переменная?
В этом докладе Михаил попытается разложить по полочкам всё это многообразие ключевых слов. Вспомним про linkage, storage duration и инстанциации шаблонов (и что изменится с приходом модулей в С++20). Разберёмся, какая связь между template и inline, между static и constexpr. Поймём, зачем нам extern, когда у нас есть inline. И осознаем, как нам потребовалось почти 20 лет, чтобы научиться нормально объявлять константы.
Доклад рассчитан на базовое знание языка.
Редкий случай. когда доклад о простом но очень важном и притом очень доступно. Автору респект.
Шикарнейший доклад, побольше бы таких
Интереснейший доклад, все супер понятно и по полочкам. Титанический труд 👍🏼
Спасибо за отличный доклад!
Шикааарно! Хорошая работа, которая действительно в помощь. Супер
Отличный доклад!
Спасибо
Было бы интересно услышать подробное объяснение темы, как влияет ключевое слово `static` на определения функций в безымянных неймспейсах. Я раньше был уверен, что никак, ведь безымянный неймспейс уже предполагает internal linkage -- но на стековерфлоу видел посты, где отдельные личности доказывали, что использование слова static в таких функциях всё равно снижает нагрузку на линкер. Интересно, что говорит на эту тему стандарт и как де факто ведут себя популярные компиляторы при наличии или отсутствии `static` перед такими функциями.
Спасибо большое за доклад! Всё чётко и по делу! Один вопрос. Если из constexpr следует inline, зачем тогда в некоторых ситуациях необходимо использовать связку inline constexpr? В докладе объясняется, что они "про разное". Зачем тогда для литеральных типов использовать constexpr вместо const?
Очень хороший доклад, рекомендую. Но хотелось бы сказать что бы самих видео про С++ были бы по больше (кроме докладов, например уроков, о мест его применение и т. д. для поднятия популярности плюсов, как для других языков.
Спасибо!!!
С++ не нуждается в рекламе, его изучают и им пользуются. Все высокопроизводительные библиотеки Python и других языков написаны на С/С++. Уроков по С++ для новичков в сети предостаточно (еще больше англоязычных), а эти конференции и доклады направлены для прояснения тонких вещей языка или освещения лучших решений определенных проблем (до них еще нужно дорасти).
Спасибо, крутой доклад, но это конечно очень сложно для понимания. До 45 минуты примерно понимал что да как исходя из рассказа, после 45 нить рассуждения оборвалась у меня в голове)
весело в конце
Что за доклад Тимура про инициализацию?
th-cam.com/video/2jJumNzcp6Y/w-d-xo.html
@@MikhailMatrosovСпасибо!
На 10:47 автор перепрыгнул на новую сущность (переменные, объявленые с const) без объяснения вида linkage и storage duration для них. На этом я потерял нить рассуждений.
45:18 - кажется extern не нужен, потому что при явной инстанциации (на самом деле, при любой) мы создаём уже саму сущность функции, а ещё объявление и так extern. То есть как было в начале и в табличке.
Не кажется, так и есть) жаль что докладчик в шаблонах не шарит(
если extern не нужен, то почему код без extern не собирается?
godbolt.org/z/r7rzMx
Докладчик говорит о том, что с помощью extern можно избавиться от инстанцирования, и поэтому extern в примере нужен.
@@mapron1 нет, жаль что ты в шаблонах не шаришь(
хотя ладно, на самом деле не жаль, пофиг вообще
Тони - пуля в зубах?
На gcc (GCC) 10.2.1 20200723 фишка с анонимными спейсами не работает, все равно получаем ошибку redefinition of 'Local'
Довольно неожиданно. А можно ссылку?
В С++ 20 список th-cam.com/video/G_jcBrrYPAs/w-d-xo.html уже из 34 пунктов, стандарт закончен :) Ну и ссылка en.cppreference.com/w/cpp/language/constant_expression