Size: a a a

2020 August 21

RL

Roman Levkovych𓅝 in supapro.cxx
Я, наверное, делаю плохо.
Но всегда оставляю это на откуп компилятору — он лучше знает, что инлайнить.

Это только для классов/структур.
источник

VS

Vladimir Suisei in supapro.cxx
Может ли кто нибудь четко в 1 посте написать в каких случаях неявно подставляется инлайн, и в каких не ставится, и я должен ставить сам
источник

RN

Ruslan Neshta in supapro.cxx
функции реализованные в хедере вне классов после инклуда этих хедеров в разные спп и линковке ихтобьектников в кучу дадут ошибку линковки
источник

RN

Ruslan Neshta in supapro.cxx
неявно если это метод класса в теле класса
источник

VS

Vladimir Suisei in supapro.cxx
Ruslan Neshta
функции реализованные в хедере вне классов после инклуда этих хедеров в разные спп и линковке ихтобьектников в кучу дадут ошибку линковки
Вопрос ты мой конечно не читал
источник

RL

Roman Levkovych𓅝 in supapro.cxx
Vladimir Suisei
Может ли кто нибудь четко в 1 посте написать в каких случаях неявно подставляется инлайн, и в каких не ставится, и я должен ставить сам
Посмотри здесь: https://www.youtube.com/watch?v=G_jcBrrYPAs

может ответит на твои вопросы
YouTube
Михаил Матросов — Спецификаторы, квалификаторы и шаблоны
Ближайшая конференция — С++ Russia 2020 Piter
11-14 ноября, Online
Подробности и билеты: https://cppconf-piter.ru/

. Ближайшая конференция — C++ Russia 2020 Moscow
29 июня - 2 июля, Online
Подробности и билеты: https://bit.ly/cpprussiamoscow

.Уже в С++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 лет, чтобы научиться…
источник

RN

Ruslan Neshta in supapro.cxx
Vladimir Suisei
Вопрос ты мой конечно не читал
я тебе общий принцип описал
источник

VS

Vladimir Suisei in supapro.cxx
Я понимаю общий принцип, меня интересуют частные случаи
источник

RN

Ruslan Neshta in supapro.cxx
тоесть ты спрашиваешь есть ли нелогичные исключения?
источник

IZ

Ilia Zviagin in supapro.cxx
Roman Levkovych𓅝
Нет. Все методы, которые имплементированы в хедере автоматически inline
Что за бред-то?
источник

IZ

Ilia Zviagin in supapro.cxx
Vladimir Suisei
Допустим у меня есть шаблонный класс в хедере. Мне нужно для каждой функции писать инлайн или нет?
Надо.
Но чаще всего методы шаблонных классов оформляют в определении класса, тогда inline неявный.
источник

IZ

Ilia Zviagin in supapro.cxx
Vladimir Suisei
Почему тогда в стд и других либах все равно пишут инлайн?
Потому что Роман тебе  наврал.
источник

RL

Roman Levkovych𓅝 in supapro.cxx
Ilia Zviagin
Что за бред-то?
А разве нет?

если я сделаю так:

class A {

void method() {

}

}


То метод не будет автоматически inline?
источник

IZ

Ilia Zviagin in supapro.cxx
Ruslan Neshta
inline позволяет линкеру нарушать одр(щас более подкованные люди меня поправят, но по сути так)
Всё правильно.
источник

IZ

Ilia Zviagin in supapro.cxx
Roman Levkovych𓅝
А разве нет?

если я сделаю так:

class A {

void method() {

}

}


То метод не будет автоматически inline?
Будет, но не потому что он в заголовке, а потому, что определён внутри класса
источник

AS

Anatoly Shirokov in supapro.cxx
Roman Levkovych𓅝
Нет. Все методы, которые имплементированы в хедере автоматически inline
хедер не имеет никакого семантического значения в С++, это кусок текста
источник

IZ

Ilia Zviagin in supapro.cxx
Vladimir Suisei
Может ли кто нибудь четко в 1 посте написать в каких случаях неявно подставляется инлайн, и в каких не ставится, и я должен ставить сам
Только при определении метода класса внутри определения класса.
Больше нигде
источник

AS

Anatoly Shirokov in supapro.cxx
Vladimir Suisei
Может ли кто нибудь четко в 1 посте написать в каких случаях неявно подставляется инлайн, и в каких не ставится, и я должен ставить сам
автоматом инлайняться методы, определенные внутри класса, шаблоны функций и их неполные специализации.
источник

IZ

Ilia Zviagin in supapro.cxx
Anatoly Shirokov
хедер не имеет никакого семантического значения в С++, это кусок текста
Толь, я не  наврал?
источник

VS

Vladimir Suisei in supapro.cxx
Ilia Zviagin
Только при определении метода класса внутри определения класса.
Больше нигде
При этом не важно, шаблонный/не шаблонный?
источник