我真的应该大量介绍显式关键字吗?

时间:2015-05-05 11:58:00

标签: c++ legacy-code explicit cppcheck

当我在我的代码 1 上使用(最近发布的)Cppcheck 1.69时,它显示了很多消息,我预期没有;-)禁用noExplicitConstructor证明所有这些都属于这种类型。

但是我发现我并不是唯一一个有很多新Cppcheck消息的人,看看LibreOffice的分析结果(我可以公开展示):

enter image description here

有经验的程序员会做什么:

  • 取消支票?
  • 大量介绍explicit关键字?

1 修改:这当然是 不是我的代码 ,但代码我必须继续工作,它是遗留代码:C和C ++在几种(预)标准版本中的混合,而且它是一个相当大的代码库。

1 个答案:

答案 0 :(得分:8)

过去我被隐式转换引入的性能命中以及彻头彻尾的错误所困扰。所以我倾向于总是将explicit用于所有构造函数,我不想参与隐式转换,以便编译器可以帮助我捕获我的错误 - 然后我尝试总是添加对ctors的“//隐含预期”注释,我明确打算将它们用作隐式转换ctors。我发现这有助于我编写更正确的代码,减少意外。

......所以我会说“是的,去加explicit” - 从长远来看,你会很高兴你做的 - 这就是我第一次了解它时所做的,我很高兴我那样。