На какие типы объектов могут указывать указатели constexpr? - PullRequest
0 голосов
/ 23 марта 2020

cppreference.com говорит:

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

Но я пытался чтобы указатель constexpr содержал адрес объекта const того же базового типа, но компилятор выдал ошибку:

const int a = 1;
int main(){
constexpr int *b = &a;
return 0;
}

Итак, какие типы могут указывать constexpr указатель до

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Проблема здесь не в constexpr. Если бы вы сказали

int *b = &a;

Вы получите ту же ошибку. т.е. "недопустимое преобразование из const int * в int *"

Мы можем исправить это, указав указатель на const int.

int const *b = &a;

Теперь мы можем добавить constexpr, и да, constexpr означает означает const

constexpr int const *b = &a;

, где b фактически является const. Это точно так же, как следующий

constexpr int const * const b = &a;
                    //^^^^^
// this const is made redundant by the constexpr.
0 голосов
/ 23 марта 2020

Ваш пример не компилируется, потому что «a» является «const int» и требует указатель «constexpr const int», чтобы указать на него.

...