[static] member function, а constexpr static member variable нельзя? Нигде не нашел ответа на этот вопрос.
Кажется при каких-то условиях contexpr неявно добавляет const. Если интересно много и подробно у Матросова был доклад о всех тонкостях constexpr спецификатора.
называется "спецификаторы, квалификаторы и шаблоны"?
"Как объявить константу в С++" https://youtu.be/GPAGiXNVED4
Почему менять constexpr static/global variable нельзя — очевидно, ни одна constexpr функция (UPD: вызываемая в core constant expression) не должна мутировать глобальное состояние, частью которого является такая переменная. А вот что такое constexpr member variable?.. Как такое объявить?
в этом вопросе четко видно что она все же может менять глобальную переменную: https://stackoverflow.com/questions/51053280/modifying-a-global-variable-in-a-constexpr-function-in-c17 причем со static-ом это тоже работает, я подумал что может constexpr функция нормально справляется с переменными в ее же области видимости, но не нашел нигде четкого объяснения этому
но, опять же, так и не понял почему это работает
Обратите внимание, что вызов Foo(false) — это вызов рантайм функции, для которых совершенно допустимо менять глобальное состояние. Но стоит изменить код таким образом: constexpr int _ = Foo(false); и ни один компилятор это не скомпилирует. Потому что вызов теперь происходит на этапе компиляции
только что проверил с помощью static_assert, работает без ошибок
Обсуждают сегодня