Будут ли const и constexpr со временем совпадать?

Я просто прочитал ответ на

const против constexpr по переменным

и смотрю это Google Tech Talk о возможностях C ++ 11/14 , в котором говорится, что constexpr может не понадобиться в будущем, когда речь заходит о функциях, поскольку компиляторы будут развиваться, чтобы выяснить это самостоятельно. Наконец, я теперь, что компиляторы Java и JVM усердно работают, чтобы выяснить, что классы (или любая другая переменная) могут быть неизменными после конструирования — без вашего явного указания — и выполнять все виды злой оптимизации на основе этого факта.

Итак, вот вопрос: может ли судьба const и constexpr в конечном итоге совпадать? То есть, даже если компилятору не гарантируется инициализация во время выполнения и т. Д., Не будет ли он в конечном итоге делать это, когда это возможно (в основном)? И когда это произойдет, не будет ли одно из ключевых слов излишним? (Может быть, как inline становится, может быть)?

3

Решение

Нет, ни один не заменит другого, у них разные роли. Бьерн Страуструп рассказывает нам в своем C ++ FAQ этот constexpr не является заменой для const и описывает различные роли каждой функции:

Обратите внимание, что constexpr не является заменой общего назначения для
const (или наоборот):

  • Уст-х Основная функция состоит в том, чтобы выразить идею о том, что объект не изменяется через интерфейс (даже если объект вполне может быть
    изменено через другие интерфейсы). Так уж получилось, что декларируя
    объект Const предоставляет отличные возможности оптимизации для
    компилятор. В частности, если объект объявлен Const И его
    адрес не берется, компилятор часто может оценить его
    инициализатор во время компиляции (хотя это не гарантировано) и сохранить
    этот объект в своих таблицах, а не испускать его в сгенерированный
    код.
  • constexpr-х Основная функция заключается в расширении диапазона того, что может быть вычислено во время компиляции, делая такой тип вычисления безопасным. Объекты
    объявленный constexpr оценивать их инициализатор во время компиляции;
    они в основном значения хранятся в таблицах компилятора и только
    выдается в сгенерированный код, если это необходимо.
5

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector