Как отказ от ответственности, я сделал свое исследование по этому поводу, прежде чем спрашивать. Я нашел аналогичный вопрос SO, но ответ там чувствует себя немного "соломой" и на самом деле не ответил на меня лично. Я также ссылался на свою удобную cppreference, но это не дает очень" ошарашенного" объяснения вещей в большинстве случаев.
В принципе, я все еще нажимаю constexpr
, но на данный момент я понимаю, что для компиляции требуются выражения. Поскольку они могут существовать только во время компиляции, на самом деле они не будут иметь адрес памяти во время выполнения. Поэтому, когда я вижу, что люди, использующие static constexpr
(например, в классе), меня смущает... static
здесь будет лишним, так как это полезно только для контекстов выполнения.
Я видел противоречие в выражении "constexpr
не допускает ничего, кроме выражения времени компиляции" (особенно здесь, в SO). Тем не менее, статья со страницы Bjarne Stroustrup объясняет в различных примерах, что на самом деле constexpr
действительно требует оценки выражения во время компиляции. Если нет, следует создать ошибку компилятора.
Мой предыдущий абзац выглядит немного не по теме, но это базовый уровень, необходимый для понимания того, почему static
можно или нужно использовать с constexpr
. К сожалению, эта базовая линия имеет много противоречащей информации, которая распространяется вокруг.
Может ли кто-нибудь помочь мне объединить всю эту информацию в чистые факты с примерами и концепциями, которые имеют смысл? В основном вместе с пониманием того, как constexpr
действительно ведет себя, почему вы используете static
с ним? И с помощью каких областей/сценариев static constexpr
имеет смысл, если их можно использовать вместе?