Можно ли объявить указатель constexpr вместо указателя на constexpr? - PullRequest
6 голосов
/ 20 мая 2019

Правильно ли, что

constexpr int* p = nullptr;

объявляет указатель constexpr (вместо указателя на constexpr int)?

Это определение

int* constexpr p = nullptr;

дает ошибку компиляции.

1 Ответ

9 голосов
/ 20 мая 2019

Стандарт говорит в [dcl.constexpr] / 1 , что только переменные или функции (и их шаблоны) могут быть constexpr:

Спецификатор constexprдолжны применяться только к определению переменной или шаблона переменной или объявлению функции или шаблона функции.

В частности, constexpr не является частью системы типов (хотя это подразумеваетconst), поэтому указатель на constexpr не является осмысленным понятием в C ++.

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

...