Size: a a a

2020 June 17

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx
О, это была короче статья в fluentcpp
источник

ПК

Побитый Кирпич... in pro.cxx
Mikhail Matrosov
т.е. если заводишь constexpr переменную внутри constexpr функции, то она не может зависеть от параметров (что логично)
Ага, а теперь замени constexpr в заголовке функции на consteval и логика сразу пропадёт :)
источник

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Ага, а теперь замени constexpr в заголовке функции на consteval и логика сразу пропадёт :)
хорошее замечание ((
источник

ПК

Побитый Кирпич... in pro.cxx
Mikhail Matrosov
тогда я снова не понимаю, какого чёрта она не может быть static 😕
Кстати не понимаю почему ты не понимаешь. Static никаких преимуществ не даёт. Локальные static переменные всё равно в рантайме инициализируются. Считай что этот код подобен:
constexpr int i;
constexpr int f(int x) {
 i = x;
 return i;
}
источник

ПК

Побитый Кирпич... in pro.cxx
А то что constexpr не может инициализироваться через параметры, даже в consteval функции (что уже звучит тупо) это известная багофича С++ :)
источник

AT

Alexey Tkachenko in pro.cxx
Побитый Кирпич
Кстати не понимаю почему ты не понимаешь. Static никаких преимуществ не даёт. Локальные static переменные всё равно в рантайме инициализируются. Считай что этот код подобен:
constexpr int i;
constexpr int f(int x) {
 i = x;
 return i;
}
неа, не совсем так. инициализация однократная
источник

ПК

Побитый Кирпич... in pro.cxx
Alexey Tkachenko
неа, не совсем так. инициализация однократная
Ну да, с поправкой на это, но принципиально ничего не меняется
источник

АК

Александр Караев... in pro.cxx
Побитый Кирпич
А то что constexpr не может инициализироваться через параметры, даже в consteval функции (что уже звучит тупо) это известная багофича С++ :)
Это невероятно грустно, но в чате уже обсуждалось, почему именно так :(
источник

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Кстати не понимаю почему ты не понимаешь. Static никаких преимуществ не даёт. Локальные static переменные всё равно в рантайме инициализируются. Считай что этот код подобен:
constexpr int i;
constexpr int f(int x) {
 i = x;
 return i;
}
"Static никаких преимуществ не даёт." - почему это должно что-то объяснять?
источник

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Кстати не понимаю почему ты не понимаешь. Static никаких преимуществ не даёт. Локальные static переменные всё равно в рантайме инициализируются. Считай что этот код подобен:
constexpr int i;
constexpr int f(int x) {
 i = x;
 return i;
}
"Локальные static переменные всё равно в рантайме инициализируются." - совсем не обязательно. в данном случае я бы даже сказал это маловероятно, т.к. constexpr значение уже известно на этапе компиляции и нет смысла его ещё раз вычислять на этапе выполнения
источник

ПК

Побитый Кирпич... in pro.cxx
Mikhail Matrosov
"Static никаких преимуществ не даёт." - почему это должно что-то объяснять?
Ну тебя не удивляет что локальная constexpr не может инициализироваться от параметра, но удивляет что static constexpr не может. Какие твои аргументы за то чтоб могла тогда?
источник

MM

Mikhail Matrosov in pro.cxx
Александр Караев
Это невероятно грустно, но в чате уже обсуждалось, почему именно так :(
именно для consteval? можно ссылку?
источник

ПК

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

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Дак если оно зависит от параметра как оно может быть известно?
про параметр вроде уже разобрались и забыли про него )
источник

MM

Mikhail Matrosov in pro.cxx
я говорю о случае, когда мы инициализируемся не от параметра
источник

ПК

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

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Тогда static вообще не нужен получается
ну это как бы не особо очевидно. сейчас поясню
источник

АК

Александр Караев... in pro.cxx
Mikhail Matrosov
именно для consteval? можно ссылку?
https://t.me/ProCxx/282259
вот тут была дискуссия между @top1pogromist и Andrey (последнего можно поспрашивать детальнее)
источник

MM

Mikhail Matrosov in pro.cxx
Побитый Кирпич
Тогда static вообще не нужен получается
вот тут явно видно разницу, между наличием и отсутствием статика https://gcc.godbolt.org/z/3Q8Tpx
источник

MM

Mikhail Matrosov in pro.cxx
Александр Караев
https://t.me/ProCxx/282259
вот тут была дискуссия между @top1pogromist и Andrey (последнего можно поспрашивать детальнее)
спасибо!
источник