Предупреждение: ISO C ++ запрещает преобразовывать строковую константу в «char *» для статического члена данных «constexpr char *» [дубликат]

Для любого дочернего процесса невозможно изменить среду родительского процесса. Лучшее, что вы можете сделать, это вывести инструкции оболочки в stdout, которые вы затем используете, или записать в файл, который вы используете в родительском.

28
задан tmaric 18 January 2019 в 17:15
поделиться

2 ответа

Существует обычная разница между указателем на константу и указателем на константу. Сделав свой constexpr char*, вы сами сделали указатель constexpr (и, конечно, const), но он все еще пытается указать на неконстантный символ - и это неправильно, так как строковые литералы const , Решение:

constexpr const char* ch = "StackOverflow!";

, который объявляет указатель constexpr на const.

0
ответ дан SergeyA 18 January 2019 в 17:15
поделиться

constexpr подразумевает const, но в этом случае он применяет const к «неправильной вещи».

constexpr char*

в основном совпадает с

char * const

, который является постоянным указателем на неконстантный char. Это не сработает, потому что строковые литералы имеют тип const char[N], поэтому отбрасывают константность элементов массива.

constexpr const char*

, с другой стороны, в основном совпадает с

char const * const

, который является постоянным указателем на константу char, то есть то, что вы хотите, так как оно сохраняет константу элементов .

0
ответ дан Remy Lebeau 18 January 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: