Я знаю разницу между const и constexpr. Одна из них - это константа времени компиляции, а другая - время компиляции или постоянная времени выполнения.const constexpr char * vs. constexpr char *
Однако, для массива символов/строк, я смущен, почему компилятор жалуется, что один из них используется над другим.
Например, у меня есть:
constexpr char* A[2] = {"....", "....."};
const constexpr char* B[2] = {"....", "....."};
С декларацией "А" я получаю:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
но декларация "B" я не получаю никаких предупреждений.
Почему дополнительный определитель констант избавляется от предупреждения? Разве оба они не «const char *»? Я спрашиваю, потому что оба объявлены с constexpr
, которые должны сделать его const char*
по умолчанию?
Я бы ожидать, чтобы быть в порядке: S
'constexpr' применяется к указателю, что делает его' const', но не объектом, на который он указывает. Таким образом, это один из нескольких случаев, когда вам может понадобиться комбинировать 'const' и' constexpr'. – 0x499602D2
'constexpr char *' является 'char * const'. Спецификатор 'constexpr' применяется ко всему типу объекта, т. Е. Относится к объявлению,' const' является квалификатором (типа). – dyp