constexpr и устаревшее предупреждение о конверсии - PullRequest
10 голосов
/ 13 марта 2011

Я пишу функцию в рамках эксперимента с Boost.Interprocess. В функции я назначаю строковый литерал переменной, объявленной constexpr char*. Когда я делаю это, я получаю:

warning: deprecated conversion from string constant to char* [-Wwrite-strings].

Насколько я понимаю, constexpr заключается в том, что в объявлении переменной она ведет себя так, как будто переменная была объявлена ​​const, но с дополнительным условием, что переменная должна быть инициализирована, и что инициализация должна быть с помощью константного выражения.

При таком понимании я бы ожидал, что constexpr char* будет вести себя как const char* и поэтому не выдаст предупреждение. Я что-то упускаю из-за того, как работает constexpr

Я компилирую с GCC 4.6.0 20110306, используя -std = c ++ 0x.

Буду признателен за любые причины вынесения предупреждения. Спасибо!

Ответы [ 2 ]

10 голосов
/ 13 марта 2011

const из constexpr сделает вашу переменную char* const.

У вас все еще есть проблема, что строковый литерал равен const char и что преобразование его адреса в char* разрешено, но не рекомендуется.

8 голосов
/ 26 мая 2015

Для другого решения этого:

Вместо -

constexpr char* foo = "bar";

Вы можете сделать-

constexpr char foo[] = "bar";

Это также избавит от предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...