Cppcheck对const std::string[]抛出警告

14

我在Linux机器上使用版本为1.85的cppcheck时遇到了一个警告:

someFile.h:23:29: 警告: 冗余代码: 发现以字符串常量开头的语句。[constStatement]
const std::string OffOn[]= {"off", "on"};
^

我做了一些研究,发现将这个语句更改为

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

移除了警告。然而,我不理解发生了什么,以及我的第一种解决方案有什么“不好”的地方。或许有人可以向我解释一下?或者给我一些提示!


1
也许建议您使用 initializer_list,例如:const std::string OffOn[]{"off", "on"};,因此 = 是不必要的。 - Denis Sablukov
@DenisSablukov 就是这样!现在我完全明白了。非常感谢! - Mukuma
5
我会向cppcheck提交一个问题报告。生成的警告信息真的没有什么帮助。 - Ruslan
1个回答

17

建议使用初始化列表braced-init-list进行初始化,例如:const std::string OffOn[]{"off", "on"};,因此=是不必要的。


6
可能有点吹毛求疵,但在这个上下文中,{...} 不是一个 std::initializer_list,而是一个“花括号初始化列表 (braced-init-list)”。 - HolyBlackCat
2
这显然是一个错误,没有“冗余代码”在这里。 - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接