Является ли `const constexpr` для переменных избыточным? - PullRequest
0 голосов
/ 30 мая 2018

cppreference утверждает, что:

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


Означает ли "объявление объекта" "любое объявление переменной"?

То есть

constexpr const int someConstant = 3;

эквивалентно

constexpr int someConstant = 3;

в C++ 11, C ++ 14 и C ++ 17?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

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

constexpr int someConstant = 3;
constexpr const int *someConstantPointerToConstant = &someConstant;

Здесь someConstantPointerToConstant - это и constexpr (т.е. он известен во время компиляции, следовательно, constexpr)и это также указатель на константу (то есть его объект не может быть изменен, следовательно const).Второе объявление выше не будет компилироваться с опущенным const ( demo ).

0 голосов
/ 30 мая 2018

const избыточно в const constexpr для объектов.

Означает ли "объявление объекта" "любое объявление переменной"?

Имеет.

Согласно cppreference , переменная или константа - это объект:

Переменная - это объект или ссылка, которая не является нестатическим элементом данных,это вводится декларацией.

...