cppcheck выдает предупреждение о const std::string[]

Я борюсь с предупреждением о том, что cppcheck (версия 1.85 на компьютере с Linux) сообщает:

someFile.h:23:29: предупреждение: Избыточный код: найден оператор, начинающийся со строковой константы. [constStatement]
const std::string OffOn[]= {"off", "on"};
^

Я провел небольшое исследование и обнаружил, что изменение утверждения на

const std::string OffOn[]= {std::string("off"), std::string("on")};

убирает предупреждение. Однако я не понимаю, что происходит и что «плохого» в моем первом решении. Может быть, мне кто-нибудь объяснит? Или подскажите!


person Mukuma    schedule 01.11.2018    source источник
comment
Возможно, вам рекомендуется использовать initializer_list, например: const std::string OffOn[]{"off", "on"};, поэтому = просто не нужен.   -  person Denis Sablukov    schedule 01.11.2018
comment
@DenisSablukov Вот оно! И теперь это имеет для меня смысл. Большое спасибо!   -  person Mukuma    schedule 01.11.2018
comment
На самом деле я бы отправил отчет о проблеме в cppcheck. Создаваемое предупреждающее сообщение действительно бесполезно.   -  person Ruslan    schedule 01.11.2018


Ответы (1)


Рекомендуется использовать инициализацию с braced-init-list, например: const std::string OffOn[]{"off", "on"};, поэтому = просто не нужен.

person Denis Sablukov    schedule 01.11.2018
comment
Это, наверное, придирки, но в данном контексте {...} не std::initializer_list. Это braced-init-list. - person HolyBlackCat; 01.11.2018
comment
Это явно ошибка, несмотря ни на что; здесь нет лишнего кода - person Lightness Races in Orbit; 01.11.2018