inline ?
inline в этом случае гарантирует odr ?
И если делать сразу определение методов класса прямо в хедере прямо в классе, все ок будет по odr ?
inline никогда не гарантирован
inlene - НЕ гарантирован. А ODR от inline-а - ГАРАНТИРОВАН
Обязательно, единственность определения гарантирована
Их НЕ обязательно делать inline, потому что не понятно, как ты собираешься использовать этот хедер. Можно использовать так, что программа будет валидной и без inline, а можно - наоборот. Но , конечно, чтобы использовать заголовок с функциями обычным, нормальным образом, функции должны быть inline или static
Static ведь будет гарантировать что подключаемая функция не будет торчать наружу. А в чем разница тогда inline/ static, когда что из этого применять ?
Да, будет. Одинаково то, что оба дают не нарушить ODR, а всё остальное - разное. У тебя вполне может быть, что функция будет применяться только в одной единице трансляции. В этом случае static-а достаточно.
Смари Все довольно просто 1. Инклюд это просто копирование текста 2. Компилируются только cpp файлы (== единицы трансляции == TU) 3. Статик гарантирует что функция не будет торчать наружу из TU (к ней нельзя прилинковаться) 4. Инлайн говорит, что функция всегда будет одна на всю программу
Вообще сложно сказать. inline теперь вообще эфимерное какое-то понятие. По сути , то же, что static, но НЕ статик.
Понятно. Спасибо. Получается static inline = ub ?
Ну ты попробуй сначала так сделать)
Получается валидной без inline и без static она будет только если она подключается в один единственный хедер, а в других только forward declaration можно?
Понятно. Спасибо
Обсуждают сегодня