Оптимизация компилятора C ++ - зачем нужен constexpr? - PullRequest
0 голосов
/ 07 января 2019

Мне интересно, почему преимущества constexpr не оптимизированы компилятором?

Компилятор должен быть в состоянии сделать вывод, что значение известно во время компиляции намного лучше, чем человек (например, если все входные данные для вызова функции известны), и тогда он должен иметь возможность пометить это значение как известное для последующий анализ пока не станет неоднозначным. Так почему же мы должны вручную сообщить компилятору, когда это так (вместо того, чтобы просто использовать ключевое слово const и оставить его компилятору для оценки значения во время компиляции).

Это потому, что технология компилятора еще не способна сделать это или есть какое-то внутреннее ограничение, которое мешает компилятору сделать это?

1 Ответ

0 голосов
/ 07 января 2019

Если вы опустите constexpr, компилятор вполне может вычислить значение во время компиляции.

Основная идея заключается в том, что вы можете сказать компилятору, что вы хотите, чтобы что-то оценивалось во время компиляции, чтобы компилятор мог выдать ошибку, если вы допустили ошибку и использовали что-то, что он не может оценить во время компиляции.

Это, очевидно, также позволяет использовать значения в тех местах, где вам разрешено использовать только константы времени компиляции, такие как размеры массивов.

...