Size: a a a

2020 May 25

ЮП

Юрий Першин... in pro.cxx
Mikhail Matrosov
полагаю, что в этом случае static не помешает, и компилятор её просто выкинет. можешь привести пример?
Согласен, оптимизирующая часть компилятора или линкера выкинут, но тут ключевой момент -  если они активированы и догадаются. Примеров у меня небогато, может более опытные свой взгляд изложат. Навскидку: конструкция if constexpr (cond) даже в неоптимизированной отладочной сборке оставляет лишь одну ветвь. Т.е. в runtime constexpr cond может быть не нужен вообще ни под каким соусом (вплоть до того, что это секрет какой-то). С другой стороны, нельзя не заметить, что static constexpr очень полезен при генерации массивов данных, которые без него могут генерироваться прямо в месте применения, во время исполнения расходуя ресурсы CPU.
источник

MM

Mikhail Matrosov in pro.cxx
Oleksandr Senkovych
static constexpr начиная с 17го стандарта - это inline-переменная, по идее у нее не должно быть никакого storage'а
это верно только для переменной-члена класса. я говорю про локальную
источник

DC

Denis Chernikov in pro.cxx
Кстати, а есть ли какая разница между constexpr и static constexpr в теле функции? 🤔
источник

MM

Mikhail Matrosov in pro.cxx
Denis Chernikov
Кстати, а есть ли какая разница между constexpr и static constexpr в теле функции? 🤔
источник

DC

Denis Chernikov in pro.cxx
Спасибо! :)
источник

DC

Denis Chernikov in pro.cxx
Да, надо было сразу там глянуть
источник

ПК

Побитый Кирпич... in pro.cxx
Mikhail Matrosov
это верно только для переменной-члена класса. я говорю про локальную
Есть ещё constinit, он как то может тут повлиять?
источник

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Есть ещё constinit, он как то может тут повлиять?
не думаю. constinit это по сути проверка компилятора. типа будь добр проверь, что это будет инициализировано на этапе компиляции, грубо говоря
источник

MM

Mikhail Matrosov in pro.cxx
больше ни на что не влияет
источник

MM

Mikhail Matrosov in pro.cxx
забавно, что из constinit даже не следует const :)
источник

DC

Denis Chernikov in pro.cxx
Mikhail Matrosov
забавно, что из constinit даже не следует const :)
Как по мне, это очень логично 🤔
источник

DC

Denis Chernikov in pro.cxx
Наверное, это причина его существования, ибо constexpr есть const
источник

OS

Oleksandr Senkovych in pro.cxx
получается локальный static constexpr все равно что глобальная static-переменная
источник

v

vehlwn in pro.cxx
Oleksandr Senkovych
static constexpr начиная с 17го стандарта - это inline-переменная, по идее у нее не должно быть никакого storage'а
Стоража нет, а адрес есть.
источник

DC

Denis Chernikov in pro.cxx
Oleksandr Senkovych
получается локальный static constexpr все равно что глобальная static-переменная
А, таки нет разницы? Я хотел чуть позднее проверить 😅
источник

DC

Denis Chernikov in pro.cxx
Oleksandr Senkovych
получается локальный static constexpr все равно что глобальная static-переменная
А, стоп
Ну да, так всегда было, и без constexpr
источник

MM

Mikhail Matrosov in pro.cxx
Oleksandr Senkovych
получается локальный static constexpr все равно что глобальная static-переменная
ну почти. время инициализации отличается
источник

MM

Mikhail Matrosov in pro.cxx
Oleksandr Senkovych
получается локальный static constexpr все равно что глобальная static-переменная
Плюс для глобальной переменной static не важен в данном контексте, тк влияет на linkage
источник

D

Dr Zlo in pro.cxx
Добрейший денёк.
источник

D

Dr Zlo in pro.cxx
Как сделать так чтобы массив расположился в статической памяти с тем учетом что его размер идёт из константы другого класса-аргумента конструктора?

У меня класс для работы с графикой инициализируется абстрактным дисплеем, из него должен вытащить ширину/высоту и создать бэкбуффер в памяти.
источник